如何使用PyPDF2按文件名下划线分隔的第三个前缀合并PDF文件
PDF按前缀分组合并问题解决方案
错误原因
- 路径拼接错误:
os.listdir()仅返回文件名,不包含文件所在的目录路径,程序默认在当前工作目录查找文件,自然找不到目标PDF,触发FileNotFoundError - 逻辑结构错误:
- 无提前分组逻辑,原代码每次循环都会写入文件并关闭合并器,下一轮循环调用
append时合并器已经处于关闭状态,完全无法完成合并 - 原代码的分组判断
if filename.split('_')[2] == prefix是自身和自身比较,永远返回True,起不到分组筛选作用
- 无提前分组逻辑,原代码每次循环都会写入文件并关闭合并器,下一轮循环调用
- 输出路径错误:原代码输出路径
C:\\test\\result后缺少路径分隔符,会导致输出文件直接命名为result1_merged.pdf,而非存放在result目录下的目标文件
修正后可运行代码
from PyPDF2 import PdfFileMerger import os # 配置路径 raw_dir = "C:\\test\\raw\\" output_dir = "C:\\test\\result\\" # 自动创建输出目录,避免目录不存在报错 os.makedirs(output_dir, exist_ok=True) # 第一步:先按前缀分组存储所有文件的完整路径 group_files = {} for filename in os.listdir(raw_dir): # 只处理PDF文件,过滤目录内其他无关文件 if not filename.endswith(".pdf"): continue # 拆分文件名获取前缀,不符合命名规则的文件直接跳过 parts = filename.split("_") if len(parts) < 3: continue prefix = parts[2] # 拼接文件完整路径,避免路径拼接错误 full_path = os.path.join(raw_dir, filename) # 加入对应分组 if prefix not in group_files: group_files[prefix] = [] group_files[prefix].append(full_path) # 第二步:逐组合并文件 for prefix, file_list in group_files.items(): merger = PdfFileMerger() for pdf_path in file_list: merger.append(pdf_path) # 拼接输出文件路径 output_path = os.path.join(output_dir, f"{prefix}_merged.pdf") merger.write(output_path) merger.close() print(f"分组{prefix}合并完成,输出路径:{output_path}")
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

