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

如何使用Python将多级子文件夹中的图片复制到单个文件夹

用Python批量复制多级子文件夹中的图片到单个文件夹

需求说明

需要将main_folder下所有多级子文件夹中的图片文件,统一复制到一个名为destination_folder的单独文件夹中,保留原文件名(需处理文件名重复情况)。

原文件夹结构

$ tree
.
├── main_folder
│   ├── Subfolder_1
│   │   └── Subfolder1_1
│   │       ├── 0.png
│   │       ├── 1.png
│   │       ├── 2.png
│   │       └── 3.png
│   │   └── Subfolder1_2
│   │       ├── 4.png
│   │       ├── 5.png
│   │       ├── 6.png
│   │       └── 7.png
│       .....
│   ├── Subfolder_2
│   │   └── Subfolder2_1
│   │       ├── 8.png
│   │       └── 9.png
│   │   └── Subfolder2_2
│       ├── 10.png
│       ├── 11.png
│       ├── 12.png
│       └── 13.png
│   └── Subfolder_3
│       └── Subfolder3_1
│           ├── 14.png
│           ├── 15.png
│           ├── 16.png
│       └── Subfolder3_2
│           ├── 17.png
│           ├── 18.png
│           ├── 19.png
│           └── 20.png
│   
└── script.py

预期目标文件夹结构

── destination_folder
    ├── 0.png
    ├── 1.png
    ├── 2.png
    ├── 3.png
    .........
    ├── n-1.png
    └── n.png

解决方案

方法1:使用os+shutil标准库实现

无需额外安装依赖,用Python内置模块完成遍历和复制,自动处理同名文件重命名。

import os
import shutil

# 定义源文件夹和目标文件夹路径
source_dir = "./main_folder"
dest_dir = "./destination_folder"

# 创建目标文件夹(不存在则自动创建)
os.makedirs(dest_dir, exist_ok=True)

# 遍历源文件夹下所有层级的文件
for root, _, files in os.walk(source_dir):
    for file in files:
        # 筛选图片格式,可自行添加需要的格式(如.jpg/.gif)
        if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
            source_path = os.path.join(root, file)
            dest_path = os.path.join(dest_dir, file)
            
            # 处理文件名重复的情况
            counter = 1
            while os.path.exists(dest_path):
                name, ext = os.path.splitext(file)
                dest_path = os.path.join(dest_dir, f"{name}_{counter}{ext}")
                counter += 1
            
            # 复制文件(保留原文件元数据)
            shutil.copy2(source_path, dest_path)
            print(f"已复制: {source_path} -> {dest_path}")

方法2:使用pathlib模块(Python3.4+ 更简洁)

用面向对象的路径操作方式,代码更易读维护。

from pathlib import Path
import shutil

# 定义源文件夹和目标文件夹路径
source_dir = Path("./main_folder")
dest_dir = Path("./destination_folder")

# 创建目标文件夹(递归创建父目录,不存在则自动创建)
dest_dir.mkdir(parents=True, exist_ok=True)

# 定义需要筛选的图片格式
image_extensions = ('.png', '.jpg', '.jpeg', '.gif')

# 递归遍历所有图片文件
for image_path in source_dir.rglob(f"*{image_extensions}"):
    dest_path = dest_dir / image_path.name
    
    # 处理文件名重复
    counter = 1
    while dest_path.exists():
        name = image_path.stem
        ext = image_path.suffix
        dest_path = dest_dir / f"{name}_{counter}{ext}"
        counter += 1
    
    # 复制文件
    shutil.copy2(image_path, dest_path)
    print(f"已复制: {image_path} -> {dest_path}")

使用步骤

  1. 将上述任一代码保存到script.py文件中(与main_folder同级)
  2. 根据实际需求修改source_dir、dest_dir以及图片格式列表
  3. 运行脚本:python script.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:32:17