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 参数。 更高级的操作(如临时文件、文件锁、内存映射),如 tempfilefcntlmmap 等模块。
相关推荐
万少17 小时前
Vibe Coding不停歇,移动端 TRAE SOLO 让你用手机也能编程啦
前端·javascript·后端
Rust研习社18 小时前
为什么 Rust 没有空指针?
开发语言·后端·rust
皮皮林55118 小时前
全网最全的 Jenkins + Maven + Git 自动化部署指南!
后端
舒一笑18 小时前
用几十行代码搞定 Chat 接口透明转发:跨环境轻量级网关实战
后端·程序员·架构
铁皮饭盒19 小时前
成为AI全栈 - 第3课:路由 RESTful Elysia 状态码 设计规范
前端·后端·全栈
我叫黑大帅19 小时前
如何通过 Python 实现招聘平台自动投递
后端·python·面试
狼爷19 小时前
短视频播放量(Views)计数系统实现方案:高并发、不丢数的工业级实践
后端·架构
苍何21 小时前
我用 Tabbit 浏览器搭了一套内容创作全自动流水线,太香了!
后端
苍何21 小时前
全网首测,TRAE SOLO 的 AI 麦克风!
后端
IT_陈寒21 小时前
Redis这个内存杀手,差点让我们运维半夜追杀我
前端·人工智能·后端