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

PyPDF2 PDF拆分代码调试遇弃用错误求助

解决PyPDF2 3.0.0+的DeprecationError问题

你的报错是因为PyPDF2 3.0.0彻底移除了旧版本的getNumPages()和getPage()方法,你只修改了第37行,但代码里还有其他几处使用这些废弃API的位置,必须全部替换:

需要修改的核心位置:

  • 第37行:while i in range(pdf.getNumPages()) → while i in range(len(pdf.pages))
  • 第41、45行:pdf.getPage(i) → pdf.pages[i]
  • 最后一行打印语句:str(pdf.getNumPages()) → str(len(pdf.pages))
  • 额外注意:addPage()已被重命名为add_page(),虽然部分版本兼容旧写法,但推荐使用新命名保持API一致性

修改后的完整代码:

# PDF Certificate Splitting

# Import packages
import re
import time
import os
from PyPDF2 import PdfReader, PdfFileWriter
from progressbar import ProgressBar
import fitz
import parameters
import sys

# Create paths
input_dir = parameters.inputs_foldername+'\Certificates'
try:
    os.mkdir(input_dir)
except:
    pass
output_dir = 'Outputs_'+parameters.batch_name+'\Split Certificates'
### Set up output folder
isExist = os.path.exists(output_dir)
if not isExist:
    os.makedirs(output_dir)

# Get paths
count = 0
for path in os.listdir(input_dir):
    full_path = os.path.join(input_dir, path)

    pdf = PdfReader(full_path)

    t0 = time.time()

    i = 0
    new = True
    with fitz.open(full_path) as doc:
        while i in range(len(pdf.pages)):
            text = doc[i].get_text()
            
            if ("Page 1 of" in text) and (new == True):
                pdf_writer = PdfFileWriter()
                pdf_writer.add_page(pdf.pages[i])
                tmp = re.search(r"(?<=\*  \*  \*\n)\d{7}", text)
                parid = tmp.group()
                i+=1
                new = False
            elif ("Page 1 of" not in text) and (new == False):
                pdf_writer.add_page(pdf.pages[i])
                i+=1
                new = False
            elif ("Page 1 of" in text) and (new == False):
                with open(output_dir+'/'+str(parid)+'.pdf', "wb") as out:
                    pdf_writer.write(out)
                new = True
            else:
                raise ValueError("'Page 1 of' not found and 'new == True' at page "+str(i))  

        with open(output_dir+'/'+str(parid)+'.pdf', "wb") as out:
                    pdf_writer.write(out) 
    
    t1 = time.time()

    # Print timing
    print(str(len(pdf.pages))+" pages processed in " + str(int(t1-t0)) + " seconds.")

关键API变化说明:

PyPDF2 3.0.0重构了页面访问逻辑,PdfReader的pages属性变为一个包含所有页面的列表:

  • 总页数通过len(pdf.pages)获取
  • 单页通过列表索引pdf.pages[i]直接访问
  • 页面添加方法统一为add_page()替代旧版addPage()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:05:27