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

如何不指定中间父文件夹复制特定子文件夹?(Python)

如何不指定中间父文件夹复制目标子文件夹?

shutil.copytree不支持直接使用shell通配符(比如*)匹配路径,所以你写的shutil.copytree("document/*/id_012", "destination")会失效——Python会把*当作路径的一部分,而非通配符来解析。

下面提供两种可行的解决方案:

方法1:用glob模块匹配路径后复制

glob模块可以帮你解析通配符,找到所有符合document/*/id_012格式的目录,再逐个复制:

import glob
import shutil
import os

# 匹配所有符合规则的目标路径
target_dirs = glob.glob("document/*/id_012")

# 遍历路径并复制,保留原版本目录结构
for src_dir in target_dirs:
    version_name = os.path.basename(os.path.dirname(src_dir))
    dst_dir = os.path.join("destination", version_name, "id_012")
    # dirs_exist_ok=True 允许目标目录已存在时覆盖/合并(Python 3.8+支持)
    shutil.copytree(src_dir, dst_dir, dirs_exist_ok=True)

如果需要把所有id_012里的内容合并到同一个destination目录下,可以改成遍历文件逐个复制:

import glob
import shutil
import os

target_dirs = glob.glob("document/*/id_012")

os.makedirs("destination", exist_ok=True)
for src_dir in target_dirs:
    for item in os.listdir(src_dir):
        src_path = os.path.join(src_dir, item)
        dst_path = os.path.join("destination", item)
        if os.path.isdir(src_path):
            shutil.copytree(src_path, dst_path, dirs_exist_ok=True)
        else:
            shutil.copy2(src_path, dst_path)

方法2:用pathlib遍历目录(Python 3.4+)

pathlib提供了更直观的路径操作方式,直接遍历document下的子目录,检查是否存在id_012:

from pathlib import Path
import shutil

document_root = Path("document")
destination_root = Path("destination")

# 遍历document下的所有子目录
for version_dir in document_root.iterdir():
    if version_dir.is_dir():
        target_dir = version_dir / "id_012"
        if target_dir.exists() and target_dir.is_dir():
            # 保留版本结构复制
            dst_dir = destination_root / version_dir.name / "id_012"
            shutil.copytree(target_dir, dst_dir, dirs_exist_ok=True)

注意事项

  • 若多个版本目录下都有id_012,需提前确定是保留各自的版本结构,还是合并内容到同一目录,两种方案分别对应上述不同代码逻辑。
  • dirs_exist_ok=True是Python 3.8及以上版本的参数,若使用更低版本,需先判断目标目录是否存在,存在则手动处理(如删除旧目录或合并文件)。

内容的提问来源于stack exchange,提问作者ss.workspace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:25:21