Python自动创建递增文件夹并批量分发文件方法
作者:WeekendFlower
时间:2026-04-17
浏览:0
本文介绍如何使用Python自动将数千个PDF文件按固定数量(如每批50个)分组,存入以数字命名(如batch_001、batch_002)的连续文件夹中,并支持基于模板目录复用空文件夹,同时精准记录每个文件所属的文件夹路径。

本文介绍如何使用 Python 自动将数千个 PDF 文件按固定数量(如每批 50 个)分组,存入以数字命名(如 batch_001、batch_002)的连续文件夹中,并支持基于模板目录复用空文件夹,同时精准记录每个文件所属的文件夹路径。
本文介绍如何使用 Python 自动将数千个 PDF 文件按固定数量(如每批 50 个)分组,存入以数字命名(如 `batch_001`、`batch_002`)的连续文件夹中,并支持基于模板目录复用空文件夹,同时精准记录每个文件所属的文件夹路径。
在批量处理大量文档(如 3800 个 PDF)时,为适配打印软件对“分批次输出”的要求,需将文件系统化地组织进编号清晰、逻辑连续的文件夹中。以下是一个健壮、易维护的 Python 教程方案,兼顾自动编号建夹、模板复用可选、文件归属可追溯三大核心需求。
✅ 核心功能说明
- 自动编号命名:生成形如 batch_001、batch_002 的标准化文件夹名(三位补零,便于排序与识别);
- 双模式支持:
- 若存在 sorted_template 模板目录(含一个或多个空文件夹),则复制首个模板文件夹并重命名为 batch_001,避免重复创建结构;
- 否则直接调用 os.makedirs() 创建新文件夹;
- 精准映射追踪:使用字典 file_to_folder_map 实时记录 filename → batch_X 的对应关系,便于后续生成分发清单、校验或调试。
? 完整可运行代码
import os
import shutil
# ? 配置路径(请根据实际环境修改)
source_directory = r"//All-the-data" # 源文件所在目录
destination_base_folder = r"//All-the-data/sorted" # 目标父目录
template_directory = r"//All-the-data/sorted_template" # 可选:模板空文件夹目录(留空或设为 None 则跳过模板逻辑)
batch_size = 50 # 每批文件数
# ✅ 步骤 1:验证源目录
if not (os.path.exists(source_directory) and os.path.isdir(source_directory)):
print(f"❌ 错误:源目录不存在 — {source_directory}")
exit(1)
# ✅ 步骤 2:获取并排序文件(确保顺序稳定,如按字母/时间)
files = [f for f in os.listdir(source_directory) if os.path.isfile(os.path.join(source_directory, f))]
files.sort() # 默认按字符串升序(适用于 'file001.pdf', 'file002.pdf' 等命名)
# ✅ 步骤 3:初始化计数器与映射表
folder_number = 1
file_to_folder_map = {}
print(f"? 开始处理 {len(files)} 个文件,每 {batch_size} 个一批...")
# ✅ 步骤 4:主循环 — 分批创建文件夹 + 复制文件 + 记录映射
for i in range(0, len(files), batch_size):
# ? 确定当前批次的目标文件夹路径
if template_directory and os.path.exists(template_directory) and os.path.isdir(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_path = os.path.join(template_directory, template_subdirs[0])
target_folder_name = f"batch_{folder_number:03d}"
batch_directory_path = os.path.join(destination_base_folder, target_folder_name)
# 复制模板(保留权限、元数据)
shutil.copytree(template_path, batch_directory_path, dirs_exist_ok=True)
print(f"? 已从模板复制:{target_folder_name}")
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) # copy2 保留修改时间、权限等元数据
file_to_folder_map[filename] = batch_directory_path
print(f"✅ 批次 {folder_number:03d} 完成:{len(batch_files)} 个文件 → {batch_directory_path}")
folder_number += 1
# ✅ 步骤 5:输出文件-文件夹映射(可用于生成 CSV 或日志)
print("\n? 文件归属总览(前 10 条示例):")
for idx, (fname, fpath) in enumerate(list(file_to_folder_map.items())[:10]):
print(f" {fname} → {os.path.basename(fpath)}")
if len(file_to_folder_map) > 10:
print(f" ... 还有 {len(file_to_folder_map) - 10} 个文件映射未显示")
# ? 提示:如需导出完整映射到 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 fname, fpath in file_to_folder_map.items():
# writer.writerow([fname, os.path.basename(fpath)])⚠️ 注意事项与最佳实践
- 路径写法:Windows 下建议使用原始字符串(r"\\path")或正斜杠("//path"),避免反斜杠转义问题;
- 模板目录要求:sorted_template 应仅包含空文件夹(无文件),且至少含一个子目录;若不确定,建议先注释掉模板逻辑,使用纯新建模式;
- 文件筛选:os.listdir() 会返回所有条目(含子目录),因此添加了 os.path.isfile() 过滤,确保只处理文件;
- 并发安全:本脚本为单线程顺序执行,适合常规批量任务;如需加速(如 SSD + 多核),可引入 concurrent.futures,但需注意 I/O 瓶颈;
- 错误防御:已加入基础路径检查与异常提示;生产环境建议补充 try/except 包裹 shutil.copy2(),捕获 PermissionError 或 DiskFullError 等。
✅ 总结
该方案摒弃了“先建夹再重命名”的低效方式,改为在创建/复制阶段即赋予规范编号,逻辑更直观、结果更可控。配合 file_to_folder_map 映射表,你不仅能完成打印分批,还可轻松导出分发清单、做一致性校验,甚至对接后续自动化流程(如生成打印指令、邮件通知等)。对于初学者,代码保持了清晰的步骤注释与模块化结构,便于理解与二次定制。
作者最新文章
赤友清理大师
2026-09-16 17:43
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破
2026-09-08 18:35
多张照片怎么合成PDF文件?三种图片转PDF工具怎么选?
2026-09-03 17:04
Excel转PDF防乱版指南:在线与本地双方案及排版检查
2026-09-03 10:04
多个PDF怎么合并成一个?合并后顺序怎么检查?
2026-09-02 19:54
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































