《Python3 文件操作详解》
文件操作是编程中不可或缺的基础技能,Python3 作为一门简洁高效的编程语言,提供了丰富的文件处理功能。无论是读取日志文件、写入配置文件,还是处理二进制数据,Python 都能通过内置模块和简单语法实现。本文将系统讲解 Python3 的文件操作,涵盖文件打开与关闭、读写模式、路径处理、异常处理等核心内容,帮助读者掌握文件操作的完整流程。
一、文件打开与关闭
在 Python 中,文件操作的第一步是使用 open()
函数打开文件。该函数的基本语法如下:
file_object = open(file_path, mode='r', encoding=None)
参数说明:
-
file_path
:文件路径,可以是相对路径或绝对路径。 -
mode
:打开模式,默认为只读模式'r'
。 -
encoding
:指定文件编码,如'utf-8'
,避免中文乱码。
打开文件后,必须显式关闭文件以释放资源。推荐使用 with
语句自动管理文件关闭:
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 离开 with 块后,文件自动关闭
若未使用 with
,需手动调用 close()
:
f = open('example.txt', 'r')
try:
content = f.read()
finally:
f.close() # 确保文件关闭
二、文件读写模式
Python 支持多种文件打开模式,常见模式如下:
模式 | 描述 |
---|---|
'r' |
只读模式(默认),文件必须存在。 |
'w' |
写入模式,覆盖原有内容;文件不存在则创建。 |
'a' |
追加模式,在文件末尾添加内容;文件不存在则创建。 |
'x' |
独占创建模式,文件已存在则报错。 |
'b' |
二进制模式,与 'r' /'w' /'a' 组合使用(如 'rb' )。 |
't' |
文本模式(默认),与 'r' /'w' /'a' 组合使用。 |
示例:写入文件
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Hello, Python!\n')
f.write('这是第二行。')
示例:追加内容
with open('output.txt', 'a', encoding='utf-8') as f:
f.write('\n追加的内容。')
三、文件读取方法
Python 提供了多种读取文件的方法,适用于不同场景:
1. 读取全部内容
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read() # 返回字符串(文本模式)或字节(二进制模式)
2. 逐行读取
方法一:使用 readline()
with open('example.txt', 'r') as f:
while True:
line = f.readline()
if not line:
break
print(line.strip()) # 去除行尾换行符
方法二:直接迭代文件对象(更高效)
with open('example.txt', 'r') as f:
for line in f:
print(line.strip())
3. 读取所有行到列表
with open('example.txt', 'r') as f:
lines = f.readlines() # 返回包含所有行的列表
四、文件路径处理
文件路径操作需注意跨平台兼容性。Python 的 os.path
模块提供了跨平台的路径处理方法:
import os
# 拼接路径
file_path = os.path.join('folder', 'subfolder', 'file.txt')
# 获取当前工作目录
current_dir = os.getcwd()
# 检查路径是否存在
if os.path.exists(file_path):
print('文件存在')
# 分离文件名和目录
dir_name, file_name = os.path.split(file_path)
Python 3.4+ 推荐使用 pathlib
模块(面向对象路径处理):
from pathlib import Path
file_path = Path('folder') / 'subfolder' / 'file.txt'
if file_path.exists():
print('文件存在')
五、二进制文件操作
处理图片、音频等二进制文件时,需使用二进制模式('b'
):
# 复制图片文件
with open('source.jpg', 'rb') as src, open('copy.jpg', 'wb') as dst:
dst.write(src.read())
六、文件编码与异常处理
文本文件需指定编码,否则可能因编码不匹配报错:
try:
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
except FileNotFoundError:
print('文件不存在')
except UnicodeDecodeError:
print('编码错误,请尝试其他编码(如 gbk)')
常用异常类型:
-
FileNotFoundError
:文件不存在。 -
PermissionError
:无文件操作权限。 -
IsADirectoryError
:操作对象是目录而非文件。
七、高级文件操作
1. 临时文件
使用 tempfile
模块创建临时文件:
import tempfile
with tempfile.NamedTemporaryFile(mode='w+', delete=True) as tmp:
tmp.write('临时内容')
tmp.seek(0) # 移动指针到开头
print(tmp.read()) # 输出: 临时内容
2. 文件压缩与解压
使用 zipfile
模块处理 ZIP 文件:
import zipfile
# 创建 ZIP 文件
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')
# 解压 ZIP 文件
with zipfile.ZipFile('archive.zip', 'r') as zipf:
zipf.extractall('extracted_files')
3. CSV 文件操作
使用 csv
模块读写 CSV 文件:
import csv
# 写入 CSV
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(data)
# 读取 CSV
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
八、性能优化技巧
1. 大文件分块读取:避免内存不足
chunk_size = 1024 * 1024 # 1MB
with open('large_file.txt', 'r') as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
process(chunk) # 处理分块数据
2. 缓冲写入:减少磁盘 I/O 次数
with open('output.txt', 'w', buffering=1024*1024) as f: # 设置缓冲区大小
for i in range(10000):
f.write(f'Line {i}\n')
九、常见问题与解决方案
1. **中文乱码**:指定正确的编码(如 encoding='utf-8'
或 encoding='gbk'
)。
2. **文件未关闭**:始终使用 with
语句或 try-finally
。
3. **路径错误**:使用 os.path
或 pathlib
处理路径拼接。
4. **权限不足**:检查文件权限或以管理员身份运行程序。
十、总结
Python3 的文件操作体系涵盖了从基础读写到高级处理的完整功能。通过合理选择模式、处理路径、捕获异常,可以高效完成各类文件任务。掌握本文介绍的内容后,读者能够应对日志分析、数据存储、配置管理等常见场景,为后续学习更复杂的项目(如 Web 开发、数据分析)打下坚实基础。
关键词:Python3文件操作、open函数、文件模式、路径处理、异常处理、二进制文件、CSV处理、性能优化
简介:本文系统讲解Python3文件操作,涵盖文件打开与关闭、读写模式、路径处理、异常处理、二进制文件操作、CSV处理及性能优化技巧,适合初学者和进阶开发者掌握文件处理的核心方法。