我正在尝试从PDF文件中获取文本。下面是代码:
from PyPDF2 import PdfFileReader
with open('HTTP_Book.pdf', 'rb') as file:
pdf = PdfFileReader(file)
page = pdf.getPage(1)
#print(dir(page))
print(page.extractText())
这给了我错误
ValueError: seek of closed file
我只是把代码放在with
语句下,它工作得很好。我的问题是:为什么会这样呢?我已经存储在'pdf'对象的信息,所以我应该能够访问它以外的块。
2条答案
按热度按时间ia2d9nvy1#
PdfFileReader
需要一个可查找的、打开的、蒸汽。它不会将整个文件加载到内存中,因此您必须保持它打开以运行方法,如getPage
。您关于创建读取器会自动读取整个文件的假设是不正确的。with
语句对上下文管理器(如文件)进行操作。当with
结束时,将调用上下文管理器的__exit__
方法。在本例中,它关闭PdfFildReader
试图用来获取第二个页面的文件句柄。正如你所发现的,正确的步骤是在关闭文件之前从PDF中读取你必须读取的内容。当且仅当您的程序需要打开PDF直到最后,您可以将文件名直接传递给
PdfFileReader
。没有(记录)的方法来关闭文件之后,虽然,所以我会推荐你原来的方法:am46iovg2#
我遇到了同样的错误,尝试将最后几行缩进with部分。找了两天后帮我工作。