国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 文件读写 以获得更好的体验。

# Python 的文件读写

文件读写是最基本的 IO 操作,Python 通过内建函数 open 打开文件,然后通过 read 方法读取文件,write 方法写入文件,最后使用 close 方法关闭文件。

运行示例

f = open('./1.txt', 'w')    # w 表示以只写模式打开文件
f.write('测试')             # 写入字符串
f.close()                   # 关闭

f = open('./1.txt', 'r')    # r 表示以只读模式打开文件
text = f.read()             # 读取内容
print(text)                 # 查看读取到的内容
f.close()                   # 关闭

# 文件的打开模式

  • r 表示读,如果文件不存在则会报错

  • w 表示写,如果文件已经存在则会清空原文件

  • a 表示追加,打开文件时偏移量在文件末尾

  • + 表示读写

  • b 表示二进制模式,常用于非文本文件,例如图片、可执行文件等

模式 说明 文件存在 文件不存在 初始偏移 返回值类型
r 只读 打开文件 报错 FileNotFoundError 文件开头 str
w 只写 清空文件 新建文件 文件开头 str
a 追加写 打开文件 新建文件 文件末尾 str
r+ 读写 打开文件 新建文件 文件开头 str
w+ 读写 清空文件 新建文件 文件开头 str
a+ 追加读写 打开文件 新建文件 文件末尾 str
rb 只读 打开文件 报错 FileNotFoundError 文件开头 byets
wb 只写 清空文件 新建文件 文件开头 byets
ab 追加写 打开文件 新建文件 文件末尾 byets
rb+ 读写 打开文件 报错 FileNotFoundError 文件开头 byets
wb+ 读写 清空文件 新建文件 文件开头 byets
ab+ 追加读写 打开文件 新建文件 文件末尾 byets

# 文件的偏移量

文件偏移量标记当前操作文件的位置,在 Python 中使用 tell 方法获取偏移量,seek 方法修改偏移量,在进行读写操作时,偏移量会自动增加。

  • 对于文本文件,偏移量的单位是 字符

  • 对于二进制文件(使用 b 模式打开),偏移量的单位是 字节

运行示例

import io                           # 导入 io 模块

f = open('./1.txt', 'w')
print('打开文件时偏移量为', f.tell())   # 查看偏移量
f.write('ABCDEFGHIJKLMNOPQRSTUVWXYZ')   # 写入内容
print('写入文件后偏移量为', f.tell())   # 查看偏移量
f.close()

f = open('./1.txt', 'rb')
print('打开文件时偏移量为', f.tell())   # 查看偏移量

f.seek(10, io.SEEK_SET)                 # 将偏移量设为,文件开头 + 10 字节
print('当前偏移量为', f.tell())

f.seek(-9, io.SEEK_END)                 # 将偏移量设为,文件开头 - 9 字节
print('当前偏移量为', f.tell())

f.seek(-5, io.SEEK_CUR)                 # 将偏移量设为,当前位置 - 5 字节
print('当前偏移量为', f.tell())

在文件的中间进行写入时,不是插入,而是覆盖:

运行示例

import io                               # 导入 io 模块

f = open('./1.txt', 'w')
f.write('ABCDEFGHIJKLMNOPQRSTUVWXYZ')   # 写入内容
f.seek(10, io.SEEK_SET)                 # 将偏移量设为,文件开头 + 10 字节
f.write('XXXXXXXX')                     # 在中间写入,会进行覆盖
f.close()

f = open('./1.txt', 'r')
print(f.read())

# with

每次都手动关闭文件略显繁琐,并且过程中如果发生了错误,可能导致忘记关闭。在 Python 中可以使用 with 解决这个问题:

with open('/path/to/file', 'r') as f:
    pass

with 的代码块运行结束时,自动调用 f.__exit__() 来关闭文件,无论是正常结束,还是异常中断。

任何有 __enter____exit__ 方法的对象均可以使用 with 语句。
在进入 with 时自动调用对象的 __enter__ 方法,在离开 with 时自动调用对象的 __exit__ 方法。

示例:

运行示例

class Refrigerator:
    def __enter__(self):
        print('打开冰箱')

    def __exit__(self, type, value, traceback):
        print('关闭冰箱')

refrigerator = Refrigerator()
with refrigerator:
    pass
本文 更新于: 2025-06-19 01:15:32 创建于: 2025-06-19 01:15:32