Python文件拷贝完全指南
为什么需要文件拷贝?
文件拷贝是编程中的常见操作,适用于:数据备份、文件处理、自动化脚本等场景。Python提供了多种高效的文件拷贝方法。
方法1:使用shutil模块(推荐)
import shutil
# 拷贝文件(保留元数据)
shutil.copy2('source.txt', 'backup/source_backup.txt')
# 拷贝整个目录
shutil.copytree('my_folder', 'backup_folder')
优点: 保留文件元数据、支持目录拷贝、跨平台兼容
方法2:使用文件读写操作
def copy_file(source, destination):
with open(source, 'rb') as src, open(destination, 'wb') as dst:
dst.write(src.read())
# 使用示例
copy_file('data.bin', 'backup/data_backup.bin')
适用场景: 需要自定义处理过程、特殊格式文件处理
方法3:处理大文件(分块读取)
def copy_large_file(src, dst, buffer_size=1024*1024):
with open(src, 'rb') as s, open(dst, 'wb') as d:
while True:
chunk = s.read(buffer_size)
if not chunk:
break
d.write(chunk)
# 拷贝1GB以上大文件
copy_large_file('large_video.mp4', 'backup.mp4')
常见错误处理
import shutil
import os
try:
if not os.path.exists('backup'):
os.makedirs('backup')
shutil.copy('important.db', 'backup/important_backup.db')
except FileNotFoundError:
print("错误:源文件不存在")
except PermissionError:
print("错误:没有写入权限")
except Exception as e:
print(f"未知错误: {str(e)}")
方法对比
方法 | 速度 | 保留元数据 | 适用场景 |
---|---|---|---|
shutil.copy2() | 快 | 是 | 常规文件拷贝 |
分块读写 | 中等 | 否 | 大文件操作 |
最佳实践
- 始终检查源文件是否存在(os.path.exists())
- 处理文件路径使用os.path.join()确保跨平台兼容
- 大文件操作时监控内存使用
- 重要操作添加异常处理
- 使用shutil.copystat()保留文件属性
完整示例
import shutil
import os
def safe_copy(src, dst):
"""安全拷贝文件(自动创建目录)"""
try:
# 创建目标目录
os.makedirs(os.path.dirname(dst), exist_ok=True)
# 执行拷贝并保留元数据
shutil.copy2(src, dst)
print(f"成功拷贝: {src} -> {dst}")
return True
except Exception as e:
print(f"拷贝失败: {str(e)}")
return False
# 使用示例
safe_copy('report.xlsx', 'backup/2023/report.xlsx')
发表评论