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 等模块。
相关推荐
geovindu几秒前
go: Floyd-Warshall Algorithms
开发语言·后端·算法·golang
AC赳赳老秦4 分钟前
Excel 动态仪表盘制作:用 OpenClaw 自动处理数据、生成交互式图表并实时更新仪表盘
大数据·服务器·后端·测试用例·excel·deepseek·openclaw
CoderYanger5 分钟前
视频裁剪+缩放+自动添加水印脚本(Python版)
开发语言·后端·python·程序人生·职场和发展·音视频·学习方法
从零开始的代码生活_38 分钟前
C++ 模板入门:函数模板、类模板与实例化机制
开发语言·c++·后端
mCell9 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯10 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
IT_陈寒13 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
程序员张315 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
CaffeinePro15 小时前
FastAPI数据库集成SQLAlchemy异步ORM全方案
后端·fastapi
小旭Coding15 小时前
凌晨告警轰炸!Go 服务协程只增不减,内存持续暴涨直至 OOM
后端