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

如何加速PyPDF2多PDF文件合并?现有方案响应过慢求替代方法

原代码问题修正

首先你的代码存在路径拼接错误,这可能导致文件读取异常或不必要的性能损耗,修正后的代码如下:

import os
from PyPDF2 import PdfMerger

source_dir = r"C:\Users\Aparns\Downloads\speeddata"
merger = PdfMerger(strict=True)

for item in os.listdir(source_dir):
    # 兼容大小写后缀,且路径用os.path.join保证格式正确
    if item.lower().endswith(".pdf"):
        file_path = os.path.join(source_dir, item)
        merger.append(file_path)

# 直接生成目标文件,无需重复拼接源目录路径
output_path = os.path.join(source_dir, "Complete.pdf")
merger.write(output_path)
merger.close()

如果修正后合并速度仍无法满足需求,可尝试以下更高效的替代实现:

替代合并方案

1. 使用PyMuPDF(fitz)

PyMuPDF是目前Python生态中处理PDF速度最快的库之一,合并操作效率远高于PyPDF2,同时支持复杂PDF格式的兼容处理。

先安装依赖:

pip install pymupdf

合并代码示例:

import os
import fitz  # PyMuPDF别名

source_dir = r"C:\Users\Aparns\Downloads\speeddata"
output_path = os.path.join(source_dir, "Complete.pdf")

# 初始化空的合并文档
merged_pdf = fitz.open()

for item in os.listdir(source_dir):
    if item.lower().endswith(".pdf"):
        file_path = os.path.join(source_dir, item)
        # 打开单个PDF并插入到合并文档
        with fitz.open(file_path) as single_pdf:
            merged_pdf.insert_pdf(single_pdf)

# 保存并关闭文档
merged_pdf.save(output_path)
merged_pdf.close()

2. 使用pdfrw

pdfrw是轻量级PDF读写库,专注于PDF结构解析与生成,合并操作的性能优于PyPDF2,适合简单合并场景。

先安装依赖:

pip install pdfrw

合并代码示例:

import os
from pdfrw import PdfReader, PdfWriter

source_dir = r"C:\Users\Aparns\Downloads\speeddata"
output_path = os.path.join(source_dir, "Complete.pdf")

writer = PdfWriter()

for item in os.listdir(source_dir):
    if item.lower().endswith(".pdf"):
        file_path = os.path.join(source_dir, item)
        # 读取单文件页面并添加到写入器
        writer.addpages(PdfReader(file_path).pages)

# 写入合并后的PDF
writer.write(output_path)

3. 调用系统命令行工具

如果系统已安装qpdf或pdftk这类专业PDF工具,可通过Python的subprocess调用,速度通常是最快的(依赖系统工具性能)。

以qpdf为例(需先安装qpdf并加入系统PATH):

import os
import subprocess

source_dir = r"C:\Users\Aparns\Downloads\speeddata"
output_path = os.path.join(source_dir, "Complete.pdf")

# 收集所有PDF文件路径
pdf_files = [os.path.join(source_dir, f) for f in os.listdir(source_dir) if f.lower().endswith(".pdf")]

# 调用qpdf执行合并
subprocess.run(
    ["qpdf", "--empty", "--pages"] + pdf_files + [output_path],
    check=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:40:48