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

如何使用Python将文件夹复制到已存在的目标文件夹中

实现方案

你需要的场景用Python标准库就能直接实现,不需要额外安装第三方依赖,完全适配Python3.8.9和Windows平台。

核心思路

很多网上的复制教程没说清路径逻辑:不要直接把已存在的bar文件夹作为复制目标,而是把目标路径明确指定为bar下的foo子文件夹,配合shutil.copytree的递归复制能力,就能在不改动bar原有内容的前提下,把整个foo(包含所有子文件、子文件夹)复制到指定位置,最终得到bar/foo/*的结构。

可直接运行的代码

import shutil
import os

# 替换为你实际的路径,字符串前加r是为了避免Windows路径反斜杠的转义问题
src_foo_path = r"C:\actual\path\to\foo"  # 待复制的foo文件夹路径
bar_parent_path = r"C:\actual\path\to\bar"  # 已存在的bar文件夹路径
target_foo_path = os.path.join(bar_parent_path, "foo")  # 拼接得到bar下的foo目标路径

# 执行递归复制
shutil.copytree(
    src=src_foo_path,
    dst=target_foo_path,
    dirs_exist_ok=True,  # Python3.8新增参数,目标路径已存在时不会报错,会自动合并内容
    symlinks=False  # 不需要复制符号链接/快捷方式就保持默认,需要复制改为True即可
)

如果你更习惯面向对象的路径写法,也可以用Python3.4+自带的pathlib实现,效果完全一致:

import shutil
from pathlib import Path

src_foo_path = Path(r"C:\actual\path\to\foo")
bar_parent_path = Path(r"C:\actual\path\to\bar")
target_foo_path = bar_parent_path / "foo"

shutil.copytree(src=src_foo_path, dst=target_foo_path, dirs_exist_ok=True)

注意事项

  • 绝对不要直接调用shutil.copytree(src_foo_path, bar_parent_path):这种写法会尝试把foo内的内容直接复制到bar根目录,且bar已存在时会直接抛出错误,完全不符合需求
  • 不需要手动提前创建bar/foo文件夹:shutil.copytree会自动创建路径中不存在的目录,即使提前创建了foo文件夹,开了dirs_exist_ok=True也不会报错
  • 如果需要保留文件的创建时间、权限等元信息,不需要额外调整参数,shutil.copytree默认使用copy2作为复制函数,已经会保留这些元信息
  • Windows平台下路径也可以直接用正斜杠书写,比如"C:/actual/path/to/bar",不需要加r前缀也能正常识别,避免转义问题

可选第三方方案

如果后续有更复杂的文件系统操作需求,可以使用pyfilesystem2库,但当前场景标准库shutil已经完全覆盖,不需要额外引入依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:54:42