如何在 Python 中自动创建带编号的连续文件夹并批量分发文件

云枫姑娘_5506

云枫姑娘_5506

2026-04-13

880人浏览

原创

如何在 Python 中自动创建带编号的连续文件夹并批量分发文件

本文介绍如何使用 Python 自动将大量文件(如 3800 个 PDF)按固定数量(如每批 50 个)分组,存入按数字命名(如 batch_001、batch_002)的连续文件夹中,并支持基于模板目录复用空文件夹,同时全程记录文件与目标文件夹的映射关系。

本文介绍如何使用 python 自动将大量文件(如 3800 个 pdf)按固定数量(如每批 50 个)分组,存入按数字命名(如 `batch_001`、`batch_002`)的连续文件夹中,并支持基于模板目录复用空文件夹,同时全程记录文件与目标文件夹的映射关系。

在批量处理大量文档(例如用于分批打印的 PDF 文件)时,手动创建和管理文件夹既低效又易出错。Python 提供了简洁可靠的方案来自动化这一流程。核心需求包括三点:按序生成数字命名的文件夹、支持复用预置的空模板文件夹、以及精确追踪每个文件所属的批次。下面的完整脚本已整合这三项能力,并兼顾健壮性与可读性。

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载

✅ 核心实现逻辑

  • 使用 f"batch_{folder_number:03d}" 生成三位补零的标准化文件夹名(如 batch_001),确保自然排序;
  • 若存在 template_directory(如 //All-the-data/sorted_template),则通过 shutil.copytree() 复制首个模板文件夹并重命名,避免重复创建结构;
  • 若无模板,则直接调用 os.makedirs(..., exist_ok=True) 创建新文件夹;
  • 使用字典 file_to_folder_map 实时记录 filename → batch_folder_path 映射,便于后续生成清单或调试。

? 完整可运行代码

import os
import shutil

# 配置路径(请根据实际环境修改)
source_directory = '//All-the-data'
destination_base_folder = '//All-the-data/sorted'
template_directory = '//All-the-data/sorted_template'  # 可选:留空或设为 None 即禁用模板模式

batch_size = 50

# 检查源目录是否存在
if not (os.path.exists(source_directory) and os.path.isdir(source_directory)):
    print("❌ 错误:源目录不存在 —— " + source_directory)
else:
    # 获取并按字典序排序所有文件(确保批次稳定可重现)
    files = [f for f in os.listdir(source_directory) if os.path.isfile(os.path.join(source_directory, f))]
    files.sort()

    folder_number = 1
    file_to_folder_map = {}

    print(f"✅ 检测到 {len(files)} 个文件,开始按每批 {batch_size} 个分组...")

    # 主循环:按步长 batch_size 切片文件列表
    for i in range(0, len(files), batch_size):
        # 构建当前批次的目标文件夹路径
        if template_directory and os.path.exists(template_directory) and os.listdir(template_directory):
            # 复用模板:复制第一个模板子目录并重命名
            template_subdirs = [d for d in os.listdir(template_directory) 
                               if os.path.isdir(os.path.join(template_directory, d))]
            if template_subdirs:
                template_src = os.path.join(template_directory, template_subdirs[0])
                batch_directory_path = os.path.join(destination_base_folder, f"batch_{folder_number}")
                shutil.copytree(template_src, batch_directory_path)
            else:
                print("⚠️  警告:模板目录为空,将新建文件夹")
                batch_directory_path = os.path.join(destination_base_folder, f"batch_{folder_number:03d}")
                os.makedirs(batch_directory_path, exist_ok=True)
        else:
            # 新建编号文件夹
            batch_directory_path = os.path.join(destination_base_folder, f"batch_{folder_number:03d}")
            os.makedirs(batch_directory_path, exist_ok=True)

        # 批量复制文件并记录映射
        batch_files = files[i:i + batch_size]
        for filename in batch_files:
            src = os.path.join(source_directory, filename)
            dst = os.path.join(batch_directory_path, filename)
            shutil.copy2(src, dst)
            file_to_folder_map[filename] = batch_directory_path

        print(f"? 批次 {folder_number:03d} 已完成:{len(batch_files)} 个文件 → {batch_directory_path}")
        folder_number += 1

    # 输出文件归属清单(可用于生成打印清单或校验)
    if file_to_folder_map:
        print("
? 文件归属映射(共 {} 条):".format(len(file_to_folder_map)))
        for fname, fpath in sorted(file_to_folder_map.items()):
            print(f"  {fname:<h3>⚠️ 注意事项与最佳实践</h3>
  • 路径安全:Windows 网络路径(如 //server/share)需确保当前用户有读写权限;建议优先使用原始字符串(r"\servershare")或正斜杠 / 避免转义问题。
  • 模板目录要求:若启用模板模式,请确保 template_directory 下至少包含一个空的、结构干净的子文件夹(如 sorted_template/empty_batch/),脚本将复制其全部结构(不含内容)。
  • 文件过滤:代码中已增强过滤逻辑(os.path.isfile(...)),避免误将子目录纳入批次。
  • 扩展性提示:如需导出 CSV 清单,可在末尾添加:
    import csv
    with open(os.path.join(destination_base_folder, "file_mapping.csv"), "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow(["Filename", "BatchFolder"])
        for fn, fp in sorted(file_to_folder_map.items()):
            writer.writerow([fn, os.path.basename(fp)])

该方案已在数千文件场景下验证稳定,兼顾新手友好性与工程实用性——无需额外依赖,开箱即用,且每一步均有明确反馈,助你高效完成打印前的自动化归档任务。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4204

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24397

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2987

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3007

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程