如何用Python 3.6复制本地磁盘分区(D盘)至外部硬盘(E盘)?
解决Python 3.6复制整个磁盘分区内容的问题
我懂你的需求——要把D盘根目录下所有文件、文件夹(包括嵌套的子文件夹)完整复制到E盘,而目前distutils.dir_util.copy_tree只能处理单个文件夹。下面给你一套实用的解决方案:
核心思路
遍历D盘根目录的所有条目,区分文件和文件夹分别处理:
- 对于文件夹:继续用你熟悉的
copy_tree(带update=True支持增量更新已存在的内容) - 对于单个文件:用
shutil.copy2复制,它会保留文件的元数据(比如创建时间、修改时间),比普通复制更完整
完整代码示例
import os import shutil from distutils.dir_util import copy_tree # 定义源分区和目标分区路径 source_drive = "D:\\" target_drive = "E:\\" # 遍历D盘根目录下的所有内容 for item in os.listdir(source_drive): source_path = os.path.join(source_drive, item) target_path = os.path.join(target_drive, item) try: if os.path.isdir(source_path): # 处理文件夹:用copy_tree实现增量复制 copy_tree(source_path, target_path, update=True) print(f"已完成文件夹复制: {source_path} -> {target_path}") elif os.path.isfile(source_path): # 处理单个文件:用copy2保留文件元数据 shutil.copy2(source_path, target_path) print(f"已完成文件复制: {source_path} -> {target_path}") except Exception as e: # 捕获异常避免程序崩溃,同时记录错误信息 print(f"复制 {source_path} 时出现错误: {str(e)}")
关键细节说明
- 路径拼接:用
os.path.join处理路径,避免手动写字符串分隔符(比如\\)可能出现的错误,同时让代码更跨平台 - 增量更新:
copy_tree的update=True参数会自动对比源和目标文件的差异,只复制新增或修改过的内容,节省时间和存储空间 - 异常处理:加入
try-except块可以跳过没有权限访问、被占用的文件/文件夹,保证程序能持续运行完成剩余复制任务 - 元数据保留:
shutil.copy2比基础的shutil.copy更合适,因为它会保留文件的创建时间、修改时间等元数据,让复制后的文件和源文件状态一致
注意事项
- 确保E盘有足够的存储空间容纳D盘的所有内容
- 复制过程中尽量不要操作D盘和E盘的文件,避免文件被占用导致复制失败
- 如果需要复制隐藏文件或系统文件,建议右键以管理员身份运行Python脚本,获取足够权限
内容的提问来源于stack exchange,提问作者mihaix
相关产品推荐
相关产品推荐

