1. 文件操作基础
1.1 打开文件
在Python中使用open()
函数来打开文件:
file = open('example.txt', 'r') # 以只读模式打开文件
文件打开模式:
'r'
- 只读(默认)'w'
- 写入,会覆盖已有文件'a'
- 追加,写入到文件末尾'x'
- 创建新文件,如果文件已存在则失败'b'
- 二进制模式't'
- 文本模式(默认)'+'
- 更新(可读可写)
1.2 读取文件内容
# 读取整个文件
content = file.read()
# 逐行读取
for line in file:
print(line)
# 读取一行
line = file.readline()
# 读取所有行到一个列表
lines = file.readlines()
1.3 写入文件
file = open('example.txt', 'w')
file.write("Hello, World!\n")
file.writelines(["Line 1\n", "Line 2\n"])
1.4 关闭文件
file.close()
最佳实践:使用with
语句
with open('example.txt', 'r') as file:
content = file.read()
# 文件会在with块结束后自动关闭
2. 高级文件操作
2.1 文件指针操作
with open('example.txt', 'r+') as file:
# 获取当前位置
position = file.tell()
# 移动指针到文件开头
file.seek(0)
# 移动指针到第10个字节
file.seek(10)
2.2 二进制文件操作
with open('image.jpg', 'rb') as file:
data = file.read()
2.3 文件属性检查
import os
# 检查文件是否存在
if os.path.exists('example.txt'):
print("文件存在")
# 获取文件大小
size = os.path.getsize('example.txt')
3. 文件和目录管理
3.1 目录操作
import os
# 创建目录
os.mkdir('new_dir')
# 递归创建目录
os.makedirs('dir1/dir2/dir3')
# 列出目录内容
files = os.listdir('.')
3.2 文件路径操作
import os
# 获取绝对路径
abs_path = os.path.abspath('example.txt')
# 路径拼接
full_path = os.path.join('dir1', 'dir2', 'file.txt')
# 获取文件名和扩展名
filename, ext = os.path.splitext('document.pdf')
4. 使用场景与最佳实践
4.1 日志记录
def log_message(message):
with open('app.log', 'a') as log_file:
log_file.write(f"{datetime.now()}: {message}\n")
最佳实践:
- 使用追加模式(‘a’)避免覆盖已有日志
- 包含时间戳
- 考虑使用Python的
logging
模块进行更专业的日志记录
4.2 配置文件读取
import json
# 读取JSON配置文件
with open('config.json', 'r') as config_file:
config = json.load(config_file)
最佳实践:
- 使用标准格式如JSON或YAML
- 提供默认配置
- 处理文件不存在的情况
4.3 数据处理
# 处理CSV文件
import csv
with open('data.csv', 'r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
process_data(row)
最佳实践:
- 对于大型文件,考虑逐行处理而非全部读入内存
- 使用专门的库如
pandas
处理复杂数据
4.4 临时文件
import tempfile
# 创建临时文件
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
temp_file.write(b"Some temporary data")
temp_path = temp_file.name
最佳实践:
- 使用
tempfile
模块创建临时文件 - 考虑是否需要在程序结束后保留文件
5. 错误处理
try:
with open('nonexistent.txt', 'r') as file:
content = file.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有权限访问文件")
except IOError as e:
print(f"IO错误: {e}")
最佳实践:
- 总是处理文件操作可能引发的异常
- 提供有意义的错误信息
- 考虑在文件不存在时创建文件或使用默认值
6. 性能考虑
-
缓冲:Python默认使用缓冲,对于大量小文件写入,可以调整缓冲区大小
with open('large_file.txt', 'w', buffering=8192) as f: # 使用8KB缓冲区
-
内存映射:对于超大文件,考虑使用
mmap
模块import mmap with open('large_file.txt', 'r+') as f: mm = mmap.mmap(f.fileno(), 0) # 直接操作内存映射
-
并行处理:对于需要处理多个文件的情况,考虑使用多线程或多进程
7. 总结
Python提供了丰富的文件操作功能,从基本的读写到高级的文件系统管理。遵循以下最佳实践:
- 总是使用
with
语句确保文件正确关闭 - 处理所有可能的异常
- 根据需求选择合适的文件打开模式
- 对于大型文件,考虑内存高效的读取方式
- 使用标准库模块处理特定格式(如
csv
、json
等) - 考虑使用专门的库处理复杂场景(如
pandas
处理数据)
掌握这些文件操作技巧将使你能够高效地处理各种文件相关的编程任务。