当前位置: 首页 > news >正文

Python 编程 - 文件操作

在 Python 3 中,文件操作主要通过内置的 open() 函数以及文件对象的方法来完成。下面从基础到进阶,全面介绍常用操作与最佳实践。


1. 打开文件:open()

f = open(file, mode='r', encoding=None, errors=None, newline=None, ...)

必需参数

  • file:文件路径(字符串或 pathlib.Path 对象)。

常用模式(mode)

模式 说明
'r' 只读(默认),文件必须存在
'w' 只写,覆盖原有内容,不存在则创建
'a' 追加,写入内容追加到末尾,不存在则创建
'x' 独占创建,文件存在则报错 FileExistsError
'b' 二进制模式(如 'rb''wb'
't' 文本模式(默认,如 'rt'
'+' 更新模式(读写,如 'r+''w+''a+'

常用参数

  • encoding:指定编码,Python 3 默认使用系统编码(如 UTF-8),但建议显式指定 encoding='utf-8'
  • errors:编码/解码错误处理方式,如 'strict'(默认)、'ignore''replace'
  • newline:控制换行符转换,取值 None'''\n''\r\n' 等。

2. 读取文件

2.1 读取全部内容

with open('data.txt', 'r', encoding='utf-8') as f:content = f.read()          # 返回字符串print(content)

2.2 按行读取

with open('data.txt', 'r', encoding='utf-8') as f:line = f.readline()          # 读一行lines = f.readlines()        # 读所有行,返回列表(每行带换行符)

2.3 迭代文件对象(最推荐,内存友好)

with open('data.txt', 'r', encoding='utf-8') as f:for line in f:               # 逐行迭代,不会一次加载全部print(line.strip())

2.4 读取指定字节数(二进制模式)

with open('data.bin', 'rb') as f:chunk = f.read(1024)         # 读取前1024字节

3. 写入文件

3.1 写入字符串(文本模式)

with open('out.txt', 'w', encoding='utf-8') as f:f.write('Hello, 世界!\n')f.write('第二行')

3.2 写入多行(可迭代对象)

lines = ['第一行\n', '第二行\n', '第三行']
with open('out.txt', 'w', encoding='utf-8') as f:f.writelines(lines)          # 不会自动添加换行,需自行包含

3.3 追加内容

with open('out.txt', 'a', encoding='utf-8') as f:f.write('追加内容')

4. 文件指针操作

  • tell():返回当前指针位置(字节数,文本模式下可能不是精确字符数)。
  • seek(offset, whence=0):移动指针。
    • whence=0:从文件开头偏移(默认)
    • whence=1:从当前位置偏移
    • whence=2:从文件末尾偏移
with open('data.txt', 'rb') as f:print(f.tell())      # 0f.seek(10)           # 跳到第10个字节data = f.read(5)

5. 自动管理资源:with 语句

使用 with 可以确保文件在代码块结束后自动关闭,即使发生异常也会正确释放资源,是推荐的标准写法

with open('file.txt', 'r') as f:data = f.read()
# 此处文件已自动关闭

6. 异常处理

手动控制时,需要 try...finally 保证关闭:

f = open('file.txt', 'r')
try:data = f.read()
finally:f.close()

或者使用 with 更简洁。


7. 二进制文件操作

处理图片、音频、压缩包等非文本文件,使用 'rb' / 'wb' 模式,不要指定 encoding

# 复制图片
with open('src.jpg', 'rb') as src, open('dst.jpg', 'wb') as dst:dst.write(src.read())

8. 文件对象常用属性

  • f.name:文件名
  • f.mode:打开模式
  • f.closed:是否已关闭
  • f.encoding:编码(文本模式)

9. 使用 pathlib 进行路径操作(Python 3.4+)

pathlib 提供面向对象的路径管理,可与 open() 结合:

from pathlib import Pathp = Path('data.txt')
with p.open('r', encoding='utf-8') as f:content = f.read()

10. 常见问题与最佳实践

  1. 始终指定 encoding,避免跨平台乱码。
  2. 优先使用 with,保证自动关闭。
  3. 处理大文件时,逐行或分块读取,避免 read() 一次性加载。
  4. 写入时注意换行符:Python 会按系统风格转换换行(\n -> \r\n 在 Windows),如需完全控制可用 newline=''
  5. 文件不存在时,'r' 模式抛出 FileNotFoundError'w' / 'a' 会自动创建。
  6. 权限问题:确保程序有相应读写权限。

11. 完整示例:读取 CSV 并处理

import csvwith open('data.csv', 'r', encoding='utf-8') as f:reader = csv.reader(f)for row in reader:print(row)

总结

操作 方法
打开 open()
读取全部 read()
读取一行 readline()
读取所有行 readlines() 或迭代
写入 write() / writelines()
关闭 close()with
指针 seek() / tell()

掌握以上内容,足以应对绝大多数 Python 文件操作场景。如有特殊需求(如内存映射、临时文件等),可进一步查阅标准库 iotempfile 等模块。

http://www.gsyq.cn/news/1566534.html

相关文章:

  • 2026年6月北京A-Level课程推荐:选择指南机构对比专业评测案例适用场景 - 品牌推荐
  • 深圳各区奢侈品回收排行榜,上门、到店门店分类整理 - 讯息早知道
  • Gemini 3.1 Pro国内合规接入实战指南
  • RSAS漏洞扫描实战:从资产配置到报告生成的五大痛点与优化方案
  • GLM-4.7深度推理与Agentic Coding实战指南
  • OneNote到Markdown终极指南:使用onenote-md-exporter实现专业级笔记迁移
  • Steam创意工坊下载终极方案:无需Steam账号也能获取海量模组的完整教程
  • 普通人用豆包赚钱的10个实操路径:短文本生成+场景化交付
  • DSP56852 AGC库构建与集成实战:从源码编译到嵌入式应用
  • AMD Ryzen调试工具完全指南:SMUDebugTool免费开源超频神器
  • 2026年6月永康GEO服务商实力排行榜:自研系统与效果交付双重把关 - Amonic
  • SpringBoot 接口传参:RequestParam、RequestBody、PathVariable 怎么选
  • 题解:AtCoder AT_awc0062_d Nearly Identical Signal Patterns
  • Mate Engine:打造你的专属免费虚拟桌面伙伴
  • Gemini 3.1 Pro延迟根因与DMXAPI全链路优化实战
  • LLM结构化经验表示Gene:从测试控制到自我进化的工程实践
  • 2026 年 6 月欧米茄官方售后门店资质实地查验报告 覆盖全国 60 + 正规服务点 - 欧米茄中国服务中心
  • 基于NXP MC56F83xxx DSC的PMSM无感FOC驱动开发实战
  • 抖音批量下载工具:5分钟掌握免费批量下载技巧
  • 基于OWASP MASTG的移动应用安全测试报告撰写终极指南
  • 2026深圳黄金回收怎么选?避坑干货 + 真实门店测评汇总 - 沉迷学习28
  • DSP56800E嵌入式开发:内联汇编与Intrinsic函数性能优化实战
  • TranslucentTB完整解决方案:Windows任务栏透明化终极指南
  • 3个核心技巧:掌握AMD Ryzen处理器的终极调试工具SMUDebugTool
  • 光学衍射神经网络实战:3大突破性技术实现全光计算革命
  • VMware Workstation Pro 17 免费许可证密钥终极指南:5分钟完成专业虚拟化配置
  • 2026大同黄金回收全攻略:6家正规门店横向评测与避坑指南 - 余生黄金回收
  • 无盘共享日志架构:高性能日志分叉技术的原理与实践
  • 本地大模型服务器搭建实战:Ollama+vLLM+llama.cpp全栈部署指南
  • 台州塑料菜板批发全解析:源头厂家直供商用与家用双场景解决方案 - 资讯速览