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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:00