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

使用PyPDF2移除PDF重复页面代码无报错但无效,求排查问题

问题分析与修复

你的代码没实现去重功能,核心问题有两个:

  • 循环漏掉最后一页:last_page_n = pdf_reader.getNumPages() - 1 后用 range(last_page_n) 遍历,只会处理到倒数第二页,最后一页根本没被加入列表,等于直接丢失了一页内容。

  • 直接比较Page对象无效:PyPDF2的Page是实例化对象,哪怕两个页面内容完全一致,它们也是不同的对象引用。x not in res判断的是对象是否在列表里,而非内容是否重复,所以所有页面都会被加入res,等于没做去重。

修复后的代码示例

要实现真正的内容去重,得把页面内容转换成可比较的格式,比如提取文本或计算页面哈希值。这里先给出基于文本提取的去重示例:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(filename_path)
pdf_writer = PdfFileWriter()
seen_content = set()

# 遍历所有页面,不再遗漏最后一页
for page_num in range(pdf_reader.getNumPages()):
    page = pdf_reader.getPage(page_num)
    # 提取页面文本作为去重判断依据
    page_content = page.extract_text()
    # 文本未出现过则保留页面
    if page_content not in seen_content:
        seen_content.add(page_content)
        pdf_writer.addPage(page)

# 保存去重后的PDF文件
with open("去重后的文件.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

补充说明

如果你的PDF包含图片或非文本内容,文本提取可能不准确,这时候可以用页面字节流计算哈希值,判断更精准:

import hashlib

# 替换上述代码中的内容判断部分
page_bytes = page.extract_bytes()
page_hash = hashlib.md5(page_bytes).hexdigest()
if page_hash not in seen_content:
    seen_content.add(page_hash)
    pdf_writer.addPage(page)

另外原代码最后打印的是原列表长度len(megalist1),如果要验证去重效果,应该打印len(res)(修复后对应len(seen_content))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:01:43