python中的文件操作

Python 文件操作完全指南

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

1. 打开文件:open()

python 复制代码
f = open('test.txt', 'r')      # 模式 'r' 表示只读

常用模式:

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

示例:

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

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

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

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

3. 读取文件

方法 说明
read(size=-1) 读取最多 size 个字符(文本模式)或字节(二进制模式),默认全部
readline() 读取一行(包括换行符),文件末尾返回空字符串
readlines() 读取所有行,返回字符串列表
直接迭代文件对象 for line in f: 逐行读取,内存高效
python 复制代码
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) 写入字符串列表(不会自动添加换行符)
python 复制代码
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 文件末尾
python 复制代码
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'。

python 复制代码
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:

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

9. 异常处理

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

10. 实用示例

逐行处理大文件

python 复制代码
with open('large.log') as f:
    for line in f:
        if 'ERROR' in line:
            print(line)

复制文件

python 复制代码
with open('src.bin', 'rb') as src, open('dst.bin', 'wb') as dst:
    dst.write(src.read())

统计行数

python 复制代码
with open('file.txt') as f:
    line_count = sum(1 for _ in f)

总结

  • 用 open() 打开文件,务必使用 with 确保正确关闭。
  • 根据需求选择合适的模式(文本/二进制、读/写/追加)。
  • 大文件应逐行迭代,避免一次性 read() 导致内存溢出。
  • 处理文本文件时明确指定 encoding 参数。 更高级的操作(如临时文件、文件锁、内存映射),如 tempfile、fcntl、mmap 等模块。
相关推荐
王中阳Go1 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
码事漫谈2 小时前
消除AI幻觉,普通人能做的五件事
后端
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
Mk598786 小时前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
后端
付威20236 小时前
从 Loop 到 Runtime:rpi Agent Loop 与 Cordis 的边界、取舍与组合
后端
IT_陈寒6 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
考虑考虑7 小时前
JDK26的JEP 500属性
java·后端·java ee
Mia_墨黎8 小时前
2026 Windows 11 终端美化完全指南
前端·后端
foreverYoung8 小时前
给开源后台做等保适配,我发现了 5 个"看起来有、其实没用"的功能 从一个尴尬的现场测试说起
后端