You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)}")

关键细节说明

  1. 路径拼接:用os.path.join处理路径,避免手动写字符串分隔符(比如\\)可能出现的错误,同时让代码更跨平台
  2. 增量更新:copy_tree的update=True参数会自动对比源和目标文件的差异,只复制新增或修改过的内容,节省时间和存储空间
  3. 异常处理:加入try-except块可以跳过没有权限访问、被占用的文件/文件夹,保证程序能持续运行完成剩余复制任务
  4. 元数据保留:shutil.copy2比基础的shutil.copy更合适,因为它会保留文件的创建时间、修改时间等元数据,让复制后的文件和源文件状态一致

注意事项

  • 确保E盘有足够的存储空间容纳D盘的所有内容
  • 复制过程中尽量不要操作D盘和E盘的文件,避免文件被占用导致复制失败
  • 如果需要复制隐藏文件或系统文件,建议右键以管理员身份运行Python脚本,获取足够权限

内容的提问来源于stack exchange,提问作者mihaix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:17:29