


























在 Python 3 中,文件操作主要通过内置的 open() 函数以及文件对象的方法来完成。下面从基础到进阶,全面介绍常用操作与最佳实践。
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' 等。with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read() # 返回字符串
print(content)
with open('data.txt', 'r', encoding='utf-8') as f:
line = f.readline() # 读一行
lines = f.readlines() # 读所有行,返回列表(每行带换行符)
with open('data.txt', 'r', encoding='utf-8') as f:
for line in f: # 逐行迭代,不会一次加载全部
print(line.strip())
with open('data.bin', 'rb') as f:
chunk = f.read(1024) # 读取前1024字节
with open('out.txt', 'w', encoding='utf-8') as f:
f.write('Hello, 世界!\n')
f.write('第二行')
lines = ['第一行\n', '第二行\n', '第三行']
with open('out.txt', 'w', encoding='utf-8') as f:
f.writelines(lines) # 不会自动添加换行,需自行包含
with open('out.txt', 'a', encoding='utf-8') as f:
f.write('追加内容')
tell():返回当前指针位置(字节数,文本模式下可能不是精确字符数)。seek(offset, whence=0):移动指针。
whence=0:从文件开头偏移(默认)whence=1:从当前位置偏移whence=2:从文件末尾偏移with open('data.txt', 'rb') as f:
print(f.tell()) # 0
f.seek(10) # 跳到第10个字节
data = f.read(5)
with 语句使用 with 可以确保文件在代码块结束后自动关闭,即使发生异常也会正确释放资源,是推荐的标准写法。
with open('file.txt', 'r') as f:
data = f.read()
# 此处文件已自动关闭
手动控制时,需要 try...finally 保证关闭:
f = open('file.txt', 'r')
try:
data = f.read()
finally:
f.close()
或者使用 with 更简洁。
处理图片、音频、压缩包等非文本文件,使用 'rb' / 'wb' 模式,不要指定 encoding。
# 复制图片
with open('src.jpg', 'rb') as src, open('dst.jpg', 'wb') as dst:
dst.write(src.read())
f.name:文件名f.mode:打开模式f.closed:是否已关闭f.encoding:编码(文本模式)pathlib 进行路径操作(Python 3.4+)pathlib 提供面向对象的路径管理,可与 open() 结合:
from pathlib import Path
p = Path('data.txt')
with p.open('r', encoding='utf-8') as f:
content = f.read()
encoding,避免跨平台乱码。with,保证自动关闭。read() 一次性加载。\n -> \r\n 在 Windows),如需完全控制可用 newline=''。'r' 模式抛出 FileNotFoundError,'w' / 'a' 会自动创建。import csv
with 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 文件操作场景。如有特殊需求(如内存映射、临时文件等),可进一步查阅标准库 io、tempfile 等模块。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。