Python 文件操作基础指南
在 Python 编程中,文件操作是数据处理、日志记录和配置管理的基础技能。掌握文件的读写、编码处理以及资源管理对于编写健壮的程序至关重要。
一、核心函数与方法
在 Python 中操作文件主要涉及一个核心函数和几个常用方法:
- open:打开文件,返回文件对象。
- read:读取文件内容到内存。
- write:将内容写入文件。
- close:关闭文件,释放系统资源。
1.1 open 函数语法
file = open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file:文件名或路径(区分大小写)。mode:打开模式(如 'r', 'w', 'a')。encoding:指定编码格式,推荐 'UTF-8'。
二、读取文件内容
2.1 基本读取步骤
- 使用
open打开文件。 - 使用
read读取内容。 - 使用
close关闭文件。
file = open("HELLO", encoding="UTF-8")
text = file.read()
print(text)
file.close()
注意:如果忘记关闭文件,会导致系统资源泄露,且可能影响后续对文件的访问。
2.2 编码错误处理
Windows 默认编码常为 GBK,而 Python 默认或现代编辑器常使用 UTF-8。若不一致会抛出 UnicodeDecodeError。
错误示例:
# 未指定编码可能导致乱码或报错
file = open("HELLO")
修正方案:
显式指定 encoding="UTF-8"。
file = open("HELLO", encoding="UTF-8")
三、文件指针与位置控制
文件指针标记了当前读取的位置。首次打开时通常指向开头。执行 read 后,指针移至末尾。
3.1 指针移动验证
file = open("HELLO", encoding="UTF-8")
text = file.read()
print(text)
print("+" * 30)
text = file.read() # 此时无法再次读取内容
print(text)
file.close()
3.2 tell() 与 seek() 方法
- tell():返回当前文件指针位置。
- seek(offset, whence):移动文件指针。
offset:偏移量。whence:起始位置(0: 开头,1: 当前位置,2: 结尾)。
file = open("HELLO", encoding="UTF-8")
print(file.tell()) # 输出 0
file.seek(5) # 移动到第 5 个字符处
print(file.tell()) # 输出 5
file.close()
四、文件打开模式详解
open 函数的第二个参数 mode 决定了文件的操作方式。
| 模式 | 说明 |
|---|---|
| r | 只读。文件不存在则报错。指针在开头。 |
| w | 只写。文件存在则清空覆盖。不存在则创建。 |
| a | 追加。指针在结尾。不存在则创建。 |
| r+ | 读写。指针在开头。文件不存在则报错。 |
| w+ | 读写。文件存在则清空覆盖。 |
| a+ | 读写。指针在结尾。 |
| b | 二进制模式(如 'rb', 'wb')。 |
4.1 写入示例
# 写入并覆盖
with open("test.txt", "w", encoding="UTF-8") as f:
f.write("Hello World")
# 追加写入
with open("test.txt", "a", encoding="UTF-8") as f:
f.write("\nAppend Content")
五、按行读取大文件
当文件过大时,一次性 read() 会占用大量内存。推荐使用 readline() 或迭代器逐行读取。
5.1 readline 方法
file = open("large_file.txt", encoding="UTF-8")
while True:
line = file.readline()
if not line:
break
print(line, end="")
file.close()
5.2 最佳实践:with 语句
使用 with 语句可以自动管理资源,无需手动调用 close(),即使发生异常也能正确关闭文件。
try:
with open("data.txt", "r", encoding="UTF-8") as f:
content = f.read()
except FileNotFoundError:
print("文件未找到")
except Exception as e:
print(f"发生错误:{e}")
六、常见错误与调试
- 权限错误 (PermissionError):无权限读取/写入文件,检查文件属性或运行权限。
- 路径错误 (FileNotFoundError):确保路径正确,可使用绝对路径。
- 编码错误 (UnicodeDecodeError):始终指定
encoding参数。
七、总结
- 操作文件首选
open函数配合with上下文管理器。 - 文本文件务必指定
encoding="UTF-8"。 - 大文件处理避免一次性加载,使用循环逐行读取。
- 善用
seek和tell进行随机访问。 - 生产环境代码需包含异常处理机制。


