Python 文件 I/O:掌握文件操作、读写与管理
Python 文件 I/O
通过清晰示例与最佳实践,学习在 Python 中打开、读取、写入和关闭文件。
视频:Python 读写文件
文件
文件是磁盘上存储数据的命名位置。因 RAM 易失性,我们依赖文件在程序执行间保持信息。
与文件交互的典型顺序是:打开 → 读/写 → 关闭。
在 Python 中打开文件
Python 内置 open() 函数返回文件对象,用于执行 I/O 操作。函数签名:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
关键点:
mode控制操作:r(读)、w(写,截断)、a(追加)、x(独占创建)。t(文本)为默认;b(二进制)返回bytes对象。+允许同时读写。- 处理文本时始终指定
encoding以避免平台相关默认值(如 Windowscp1252,Linuxutf-8)。
| 模式 | 描述 |
|---|---|
r | 读取(默认) |
w | 写入;创建新或截断现有 |
x | 独占创建;文件存在则失败 |
a | 追加;不存在则创建 |
t | 文本模式(默认) |
b | 二进制模式 |
+ | 读写 |
f = open("test.txt") # r/rt
f = open("test.txt", "w") # 写入
f = open("img.bmp", "r+b") # 读写二进制
因 a 是字符,除非编码否则不等于数字 97。文本文件显式设置 encoding='utf-8'。
f = open("test.txt", mode='r', encoding='utf-8')
在 Python 中关闭文件
正确关闭文件释放系统资源。close() 方法简单,但上下文管理器是最安全模式。
with open("test.txt", encoding='utf-8') as f:
# 执行文件操作
pass
上下文管理器保证即使发生异常也会关闭。手动打开文件时,用 try...finally 包装。
try:
f = open("test.txt", encoding='utf-8')
# 操作
finally:
f.close()
在 Python 中写入文件
用 w、a 或 x 模式写入。w 覆盖现有内容;a 保留。
write() 方法接受字符串(二进制模式接受 bytes)并返回写入字符数。
with open("test.txt", "w", encoding='utf-8') as f:
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")
记得包含换行符分隔行。
在 Python 中读取文件
用 r 模式打开。read() 方法接受可选 size 参数;省略则读至 EOF。
f = open("test.txt", "r", encoding='utf-8')
print(f.read(4)) # 'This'
print(f.read(4)) # ' is '
print(f.read()) # 剩余内容
f.close()
用 seek() 移动光标,tell() 查询位置:
print(f.tell()) # 当前位置
f.seek(0) # 回到开头
print(f.read()) # 全部读取
高效逐行迭代:
for line in f:
print(line, end='')
也可用 readline() 和 readlines() 逐行访问。
Python 文件方法
下表是文本模式下最常用文件方法的简明参考。
| 方法 | 描述 |
|---|---|
| close() | 关闭文件 |
| detach() | 分离底层二进制缓冲区 |
| fileno() | 返回文件描述符 |
| flush() | 刷新写入缓冲区 |
| isatty() | 检查流是否交互式 |
| read(n) | 读取最多 n 字符;None 读至 EOF |
| readable() | 流是否可读 |
| readline(n=-1) | 读取单行,最多 n 字符 |
| readlines(n=-1) | 返回行列表,最多 n 字符 |
| seek(offset, from_=SEEK_SET) | 将光标移至 offset 相对 from_(开始、当前、末尾) |
| seekable() | 流是否支持随机访问 |
| tell() | 获取当前光标位置 |
| truncate(size=None) | 将文件调整至 size 字节 |
| writable() | 流是否可写 |
| write(s) | 写入字符串 s;返回写入字符数 |
| writelines(lines) | 写入字符串可迭代对象 |
Python
- C 语言输入输出(I/O)精通:scanf() 与 printf() 详解
- C 语言文件 I/O 实战:创建、打开、读写与二进制操作
- C# 文件 I/O 完全指南:流、读写操作与文件系统管理
- 精通Python数据类型:实战指南
- 精通Python运算符:全面指南
- Python 列表操作:创建、访问、修改与进阶技巧
- 精通 Python 元组:创建、访问与进阶操作
- 精通 Python 字典:创建、操作与进阶技巧
- Python 文件 I/O:掌握文件操作、读写与管理
- Python 检查文件与目录是否存在:实战指南
- Python JSON:编码、解码与文件处理实战指南
- Python 文件 I/O:掌握输入输出操作