使用Python的PyPDF2库读取PDF时遭遇DeprecationError的问题求助
PyPDF2 读取PDF触发DeprecationError的解决方法
问题场景
使用PyPDF2读取同目录下spm.pdf文件时出现废弃错误,原代码如下:
def pdf_reader(): book = open("spm.pdf","rb") pdfReader = PyPDF2.PdfFileReader(book) pages = pdfReader.numPages speak(f"Total number of pages in this book are {pages}") speak("Sir please enter the page number which you want me to read") pg = int(input("enter the page number here : ")) page = pdfReader.getPage(pg) text = page.extractText() speak(text)
运行后报错信息:
Traceback (most recent call last): File "c:\Users\Ishu\Desktop\jarvis\jarvis.py", line 269, in run TaskExecution() File "c:\Users\Ishu\Desktop\jarvis\jarvis.py", line 261, in TaskExecution pdf_reader() File "c:\Users\Ishu\Desktop\jarvis\jarvis.py", line 93, in pdf_reader pdfReader = PyPDF2.PdfFileReader(book) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Ishu\AppData\Local\Programs\Python\Python311\Lib\site-packages\PyPDF2\_reader.py", line 1974, in __init__ deprecation_with_replacement("PdfFileReader", "PdfReader", "3.0.0") File "C:\Users\Ishu\AppData\Local\Programs\Python\Python311\Lib\site-packages\PyPDF2\_utils.py", line 369, in deprecation_with_replacement deprecation(DEPR_MSG_HAPPENED.format(old_name, removed_in, new_name)) File "C:\Users\Ishu\AppData\Local\Programs\Python\Python311\Lib\site-packages\PyPDF2\_utils.py", line 351, in deprecation raise DeprecationError(msg) PyPDF2.errors.DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.
解决方案
PyPDF2 3.0.0+版本对API做了多处调整,需同步修改以下几个点:
修改后的完整代码:
def pdf_reader(): with open("spm.pdf","rb") as book: # 用with语句自动管理文件资源,避免泄漏 pdfReader = PyPDF2.PdfReader(book) pages = len(pdfReader.pages) # 原numPages属性替换为pages列表,通过len获取页数 speak(f"Total number of pages in this book are {pages}") speak("Sir please enter the page number which you want me to read") pg = int(input("enter the page number here : ")) page = pdfReader.pages[pg] # 原getPage方法替换为直接索引pages列表 text = page.extract_text() # 原extractText方法替换为蛇形命名的extract_text speak(text)
核心修改项:
- 废弃类
PdfFileReader替换为新类PdfReader - 页数获取方式从
numPages属性改为len(pdfReader.pages) - 页面获取方式从
getPage(pg)改为pages[pg] - 文本提取方法从
extractText()改为extract_text() - 新增
with语句优化文件操作逻辑
内容的提问来源于stack exchange,提问作者Ishu Miglani
相关产品推荐
相关产品推荐

