基于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)}")
使用说明
- 准备任务文件:
- TXT/CSV格式:每行遵循
输入PDF1路径;输入PDF2路径;输出PDF路径格式,空路径直接留空(如path1/file1.pdf;;path3/output1.pdf) - XLS/XLSX格式:表格需为3列,每行对应一组任务,空单元格代表空路径
- TXT/CSV格式:每行遵循
- 配置脚本:在
if __name__ == "__main__"块中修改task_file为你的任务文件路径 - 运行脚本:
python pdf_merge_script.py
注意事项
- 确保输入PDF文件路径正确,若文件不存在脚本会抛出错误
- 输出路径的目录不存在时,脚本会自动创建
- 若不需要处理XLS/XLSX文件,可移除
pandas相关代码及依赖
内容的提问来源于stack exchange,提问作者Maxence MELIN
相关产品推荐
相关产品推荐

