Skip to content

文件与 I/O

文件操作

打开和关闭文件

在进行文件操作时,首先要打开文件,操作完成后要关闭文件。Python 提供了内置的 open() 函数来打开文件。

  • open() 函数: 用于打开文件,并返回文件对象。
    python
    file = open('filename', 'mode')
    • filename:文件的路径或名称。
    • mode:文件的操作模式,如只读、写入、追加等。

常用的文件操作模式:

  • 'r':只读模式,文件必须存在。
  • 'w':写入模式,文件不存在时创建,存在时清空内容。
  • 'a':追加模式,文件不存在时创建,存在时内容添加到末尾。
  • 'b':以二进制模式打开文件,结合 'rb', 'wb' 等模式使用。

关闭文件

使用完文件后,应该调用 close() 方法关闭文件,释放资源:

python
file.close()

使用 with 语句

with 语句会自动处理文件关闭问题,是处理文件的推荐方式:

python
with open('example.txt', 'r'as file:
    content = file.read()
    print(content)
# 文件在with语句块结束后自动关闭

文件的读写操作

读文件

  • read():读取文件的全部内容。
  • readline():每次读取文件的一行。
  • readlines():读取所有行并返回一个列表。
python
# 读取文本文件的内容
with open('example.txt', 'r'as file:
    content = file.read() # 读取整个文件
    print(content)

# 按行读取文件
with open('example.txt', 'r'as file:
    for line in file:
        print(line.strip()) # 去除每行末尾的换行符

写文件

  • write():将字符串写入文件。
  • writelines():将一个字符串列表写入文件。
python
# 写入文件
with open('output.txt', 'w'as file:
    file.write("Hello, world!\n")
    file.write("This is a new line.")

# 写入多个行
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open('output.txt', 'w'as file:
    file.writelines(lines)

二进制文件的读写

  • 二进制模式'rb', 'wb')读写文件时,数据是以字节形式读写的。
python
# 读取二进制文件(如图片、音频)
with open('image.jpg', 'rb'as file:
    binary_data = file.read()

# 写入二进制文件
with open('copy.jpg', 'wb'as file:
    file.write(binary_data)

文件指针与操作模式

文件指针指向文件的当前位置,所有的读写操作都从当前指针位置开始。

  • seek(offset, whence):移动文件指针到指定位置。
    • offset:偏移量。
    • whence:起始位置(0 代表文件开头,1 代表当前位置,2 代表文件末尾)。
python
# 移动指针到文件开头
with open('example.txt', 'r'as file:
    file.seek(0)
    first_char = file.read(1# 读取第一个字符
    print(first_char)
  • tell():返回文件指针的当前位置。
python
with open('example.txt', 'r'as file:
    file.read(5)
    position = file.tell() # 返回当前位置
    print(f"Current file pointer position: {position}")

序列化与反序列化

序列化是指将对象转换为字节流或字符串,以便保存到文件或传输;反序列化则是将字节流或字符串还原为对象。Python 支持通过 picklejson 模块进行序列化与反序列化。

pickle 模块

pickle 模块用于将任意 Python 对象序列化为二进制格式,或将其反序列化为 Python 对象。它常用于将对象保存到文件或从文件中加载对象。

  • pickle.dump():将Python对象序列化并写入文件。
  • pickle.load():从文件中读取序列化的数据并将其反序列化为Python对象。
python
import pickle

# 序列化对象并写入文件
data = {'name': 'Alice', 'age': 25, 'city': 'New York'}
with open('data.pkl', 'wb'as file:
    pickle.dump(data, file)

# 从文件中读取并反序列化对象
with open('data.pkl', 'rb'as file:
    loaded_data = pickle.load(file)
    print(loaded_data)

输出:

{'name': 'Alice', 'age': 25, 'city': 'New York'}

json 模块

json 模块用于处理 JSON 格式的数据,JSON 是一种轻量级的数据交换格式,常用于Web开发中。与 pickle 不同,json 仅支持基本数据类型(如字典、列表、字符串、整数等)的序列化。

  • json.dump():将 Python 对象序列化为 JSON 格式并写入文件。
  • json.load():从文件中读取 JSON 数据并反序列化为 Python 对象。
  • json.dumps():将 Python 对象序列化为 JSON 格式的字符串。
  • json.loads():将 JSON 字符串反序列化为 Python 对象。
python
import json

# 序列化对象并写入文件
data = {'name': 'Bob', 'age': 30, 'city': 'Los Angeles'}
with open('data.json', 'w'as file:
    json.dump(data, file)

# 从文件中读取并反序列化对象
with open('data.json', 'r'as file:
    loaded_data = json.load(file)
    print(loaded_data)

输出:

{'name': 'Bob', 'age': 30, 'city': 'Los Angeles'}
python
# JSON字符串的序列化与反序列化
json_str = json.dumps(data)
print(json_str) # 输出为JSON格式字符串

# 将JSON字符串反序列化为Python对象
python_data = json.loads(json_str)
print(python_data)

总结

  • 文件操作open() 函数用于打开文件,文件操作模式包括读取、写入、追加等;with 语句是处理文件的推荐方式。
  • 文件指针:使用 seek()tell() 来操作和获取文件指针位置。
  • 序列化与反序列化pickle 用于处理 Python 的任意对象,json 则用于处理 JSON 格式的数据,适合 Web 应用。
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!