当前位置: 首页 > 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.jsqmd.com/news/1054617/

相关文章:

  • 2026年6月最新帝舵中国官方售后服务网点客服地址及电话 - 亨得利官方服务中心
  • 嵌入式GUI开发:emWin MULTIEDIT控件API详解与实战应用
  • 全面掌控ThinkPad风扇:TPFanCtrl2让你的笔记本电脑散热更智能
  • 2026年6月北京A-Level课程推荐:选择指南机构对比专业评测案例适用场景 - 品牌推荐
  • 嵌入式GUI开发:emWin显示驱动配置与多层软层实战指南
  • 深圳各区奢侈品回收排行榜,上门、到店门店分类整理 - 讯息早知道
  • Gemini 3.1 Pro国内合规接入实战指南
  • RSAS漏洞扫描实战:从资产配置到报告生成的五大痛点与优化方案
  • DeepSeek-V2本地部署实战:显存优化、中文适配与生产级API封装
  • Android Debug Bridge (adb) 卸载手机软件 - ct
  • Node.js+MySQL+VPS部署生产级Etherpad实战指南
  • 杭州闲置名包变现指南,高排名靠谱回收门店全程无套路 - 奢品小当家
  • ViGEmBus终极指南:如何在Windows上免费实现游戏控制器模拟
  • GLM-4.7深度推理与Agentic Coding实战指南
  • Kubernetes新手贡献实战:37天从零提交首个PR
  • 你的QQ音乐被“锁“住了吗?用qmc-decoder一键解锁音乐自由
  • 2026年锦州正规四害消杀企业有哪些靠谱的选择?百科解读 - 优质品牌推荐商
  • 一站式游戏模组管理革命:XXMI启动器如何让你告别繁琐配置
  • OneNote到Markdown终极指南:使用onenote-md-exporter实现专业级笔记迁移
  • Windows本地部署Qwen3-14B实战指南:Ollama+Open WebUI零Docker方案
  • 2026 年 6 月欧米茄全国售后网点深度实地调研报告书 含迁店新开全部信息 - 欧米茄中国服务中心
  • 上海闲置黄金变现流程,正规回收平台实测测评 - 奢侈品交易观察员
  • 上海全域黄金回收门店测评 2026 年 6 月权威榜单 - 奢侈品交易观察员
  • DeepSeek-R1本地私有化部署全链路实战指南
  • Steam创意工坊下载终极方案:无需Steam账号也能获取海量模组的完整教程
  • 普通人用豆包赚钱的10个实操路径:短文本生成+场景化交付
  • DeepSeek V4国产大模型落地实战:从本地部署到生产就绪
  • 2026年6月永康GEO服务商实力排行榜:自研系统与效果交付双重把关 - Amonic
  • 佛山市南海区瓶装水配送哪家靠谱 淼鑫水业 0757-85622611 18924575781 - GrowthUME
  • SpringBoot 接口传参:RequestParam、RequestBody、PathVariable 怎么选