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

基于Python实现列表驱动的批量两两合并PDF脚本需求

Python批量PDF合并脚本(支持单/双输入源)

核心需求回顾

  • 从TXT/CSV/XLS格式的任务列表中批量读取任务,每行格式为输入PDF1路径;输入PDF2路径;输出PDF路径
  • 两两合并两个输入PDF生成输出文件;若其中一个输入路径为空,则直接将存在的那个PDF复制为输出文件
  • 批量处理多组任务(如示例中的100组)

实现方案

选用pdfrw库处理PDF合并逻辑,结合shutil处理单文件复制,pandas(可选)支持XLS/XLSX格式的任务列表读取。该方案轻量且能覆盖所有需求场景。

依赖安装

先安装所需依赖:

pip install pdfrw pandas  # pandas仅在需要处理XLS/XLSX时安装

完整代码

import os
import shutil
from pdfrw import PdfReader, PdfWriter

def process_single_task(input_paths, output_path):
    """处理单个PDF合并/复制任务"""
    # 过滤空路径,得到有效输入文件列表
    valid_inputs = [path.strip() for path in input_paths if path.strip()]
    
    # 确保输出目录存在
    os.makedirs(os.path.dirname(output_path), exist_ok=True)
    
    if len(valid_inputs) == 1:
        # 单输入场景:直接复制文件
        shutil.copyfile(valid_inputs[0], output_path)
        print(f"已复制 {valid_inputs[0]} 到 {output_path}")
    elif len(valid_inputs) == 2:
        # 双输入场景:合并PDF
        writer = PdfWriter()
        for path in valid_inputs:
            writer.addpages(PdfReader(path).pages)
        writer.write(output_path)
        print(f"已合并 {valid_inputs[0]} + {valid_inputs[1]} 到 {output_path}")
    else:
        print(f"无效任务:输入路径数量不符合要求 - {input_paths}")

def load_task_list(file_path):
    """从TXT/CSV/XLS/XLSX文件加载任务列表"""
    tasks = []
    ext = os.path.splitext(file_path)[1].lower()
    
    if ext in ['.txt', '.csv']:
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                # 按分号分割路径,确保拆分成3个元素
                parts = line.split(';')
                if len(parts) != 3:
                    print(f"忽略无效行:{line}")
                    continue
                tasks.append(parts)
    elif ext in ['.xls', '.xlsx']:
        import pandas as pd
        df = pd.read_excel(file_path, header=None)
        # 假设表格为3列,每行对应一个任务
        for _, row in df.iterrows():
            parts = row.tolist()
            if len(parts) != 3:
                print(f"忽略无效行:{parts}")
                continue
            tasks.append([str(p) for p in parts])
    else:
        raise ValueError(f"不支持的文件格式:{ext}")
    return tasks

if __name__ == "__main__":
    # 替换为你的任务文件路径
    task_file = "tasks.txt"  # 可替换为tasks.csv或tasks.xlsx
    try:
        tasks = load_task_list(task_file)
        print(f"加载到 {len(tasks)} 个任务")
        for idx, task in enumerate(tasks, 1):
            print(f"处理任务 {idx}/{len(tasks)}...")
            process_single_task(task[:2], task[2])
        print("所有任务处理完成")
    except Exception as e:
        print(f"处理出错:{str(e)}")

使用说明

  1. 准备任务文件:
    • TXT/CSV格式:每行遵循输入PDF1路径;输入PDF2路径;输出PDF路径格式,空路径直接留空(如path1/file1.pdf;;path3/output1.pdf)
    • XLS/XLSX格式:表格需为3列,每行对应一组任务,空单元格代表空路径
  2. 配置脚本:在if __name__ == "__main__"块中修改task_file为你的任务文件路径
  3. 运行脚本:
    python pdf_merge_script.py
    

注意事项

  • 确保输入PDF文件路径正确,若文件不存在脚本会抛出错误
  • 输出路径的目录不存在时,脚本会自动创建
  • 若不需要处理XLS/XLSX文件,可移除pandas相关代码及依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:43:10