使用Python进行文件拷贝的方法
Python提供了多种方式进行文件拷贝操作,以下是几种常用的方法:
1. 使用shutil模块(推荐)
import shutil# 拷贝单个文件
shutil.copy('source.txt', 'destination.txt')# 拷贝整个目录(包括子目录)
shutil.copytree('source_dir', 'destination_dir')# 拷贝文件并保留元数据(如权限、时间戳等)
shutil.copy2('source.txt', 'destination.txt')
2. 使用os模块和文件操作
import os# 读取源文件并写入目标文件
with open('source.txt', 'rb') as src, open('destination.txt', 'wb') as dst:dst.write(src.read())# 如果要拷贝目录,需要递归处理
def copy_dir(source, destination):if not os.path.exists(destination):os.makedirs(destination)for item in os.listdir(source):src_path = os.path.join(source, item)dst_path = os.path.join(destination, item)if os.path.isdir(src_path):copy_dir(src_path, dst_path)else:with open(src_path, 'rb') as src, open(dst_path, 'wb') as dst:dst.write(src.read())copy_dir('source_dir', 'destination_dir')
3. 使用pathlib模块(Python 3.4+)
from pathlib import Path# 拷贝单个文件
Path('source.txt').write_bytes(Path('destination.txt').read_bytes())# 拷贝目录(需要自定义递归函数)
注意事项
对于大文件,建议使用分块读取和写入以避免内存问题:
chunk_size = 1024 * 1024 # 1MB with open('source.txt', 'rb') as src, open('destination.txt', 'wb') as dst:while chunk := src.read(chunk_size):dst.write(chunk)
在拷贝前检查目标路径是否存在,避免覆盖重要文件:
if os.path.exists('destination.txt'):raise FileExistsError("目标文件已存在")
对于跨平台操作,注意处理路径分隔符问题(使用
os.path.join()
或pathlib.Path
)。
shutil模块通常是文件拷贝的最佳选择,因为它提供了高级接口并处理了许多边缘情况。