python中的文件操作

3 阅读3分钟

Python 文件操作完全指南

Python 通过内置的 open() 函数和文件对象提供丰富的文件操作能力。下面系统介绍常用操作。

1. 打开文件:open()

f = open('test.txt', 'r')      # 模式 'r' 表示只读

常用模式

模式说明文件指针位置
'r'只读(默认)文件开头
'w'写入(会覆盖或创建文件)文件开头(清空原内容)
'x'独占创建,文件已存在则报错文件开头
'a'追加(文件末尾添加)文件末尾
'b'二进制模式(与 r/w/a 组合,如 'rb'取决于组合
't'文本模式(默认)取决于组合
'+'读写模式(如 'r+''w+'取决于前缀

示例

f = open('data.bin', 'wb')      # 二进制写入
f = open('log.txt', 'a')        # 追加文本
f = open('file.txt', 'r+')      # 读写

2. 推荐方式:使用 with 上下文管理器

with 自动关闭文件,即使发生异常也能正确释放资源。

with open('test.txt', 'r') as f:
    content = f.read()
# 离开 with 块后,f 已被自动关闭

3. 读取文件

方法说明
read(size=-1)读取最多 size 个字符(文本模式)或字节(二进制模式),默认全部
readline()读取一行(包括换行符),文件末尾返回空字符串
readlines()读取所有行,返回字符串列表
直接迭代文件对象for line in f: 逐行读取,内存高效
with open('test.txt') as f:
    data = f.read()          # 一次性读取全部

with open('test.txt') as f:
    for line in f:           # 逐行迭代,适合大文件
        print(line.strip())

4. 写入文件

方法说明
write(s)写入字符串 s,返回写入的字符数
writelines(lines)写入字符串列表(不会自动添加换行符)
with open('output.txt', 'w') as f:
    f.write("Hello\n")
    f.writelines(["line1\n", "line2\n"])

注意'w' 模式会清空原文件;如需追加,使用 'a' 模式。

5. 文件指针操作

方法说明
tell()返回当前文件指针位置(字节数,二进制模式;文本模式下可能不准确,取决于编码)
seek(offset, whence=0)移动指针:whence=0 文件开头偏移;1 当前位置;2 文件末尾
with open('data.bin', 'rb') as f:
    print(f.tell())      # 0
    f.seek(10)           # 跳到第10字节
    data = f.read(5)     # 读取5字节

6. 其他常用属性和方法

  • f.closed:文件是否已关闭。
  • f.name:文件名。
  • f.mode:打开模式。
  • f.flush():将缓冲区内容强制写入磁盘。
  • f.close():关闭文件(通常用 with 避免手动调用)。

7. 二进制文件操作

读取图片、音频等需用二进制模式 'rb''wb'

with open('image.jpg', 'rb') as f:
    img_data = f.read()

with open('copy.jpg', 'wb') as f:
    f.write(img_data)

8. 常见编码处理

文本模式默认使用平台编码(如 Windows 的 GBK),建议显式指定 encoding

with open('utf8.txt', 'r', encoding='utf-8') as f:
    content = f.read()

9. 异常处理

try:
    with open('not_exist.txt') as f:
        data = f.read()
except FileNotFoundError:
    print("文件不存在")
except PermissionError:
    print("权限不足")

10. 实用示例

逐行处理大文件

with open('large.log') as f:
    for line in f:
        if 'ERROR' in line:
            print(line)

复制文件

with open('src.bin', 'rb') as src, open('dst.bin', 'wb') as dst:
    dst.write(src.read())

统计行数

with open('file.txt') as f:
    line_count = sum(1 for _ in f)

总结

  • open() 打开文件,务必使用 with 确保正确关闭。
  • 根据需求选择合适的模式(文本/二进制、读/写/追加)。
  • 大文件应逐行迭代,避免一次性 read() 导致内存溢出。
  • 处理文本文件时明确指定 encoding 参数。 更高级的操作(如临时文件、文件锁、内存映射),如 tempfilefcntlmmap 等模块。