python-3.x ValueError:seek of closed file在PyPDF2上工作并得到此错误

sczxawaw  于 2023-05-08  发布在  Python
关注(0)|答案(2)|浏览(594)

我正在尝试从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'对象的信息,所以我应该能够访问它以外的块。

ia2d9nvy

ia2d9nvy1#

PdfFileReader需要一个可查找的、打开的、蒸汽。它不会将整个文件加载到内存中,因此您必须保持它打开以运行方法,如getPage。您关于创建读取器会自动读取整个文件的假设是不正确的。
with语句对上下文管理器(如文件)进行操作。当with结束时,将调用上下文管理器的__exit__方法。在本例中,它关闭PdfFildReader试图用来获取第二个页面的文件句柄。
正如你所发现的,正确的步骤是在关闭文件之前从PDF中读取你必须读取的内容。当且仅当您的程序需要打开PDF直到最后,您可以将文件名直接传递给PdfFileReader。没有(记录)的方法来关闭文件之后,虽然,所以我会推荐你原来的方法:

from PyPDF2 import PdfFileReader
with open('HTTP_Book.pdf', 'rb') as file:
    pdf = PdfFileReader(file)
    page = pdf.getPage(1)
    print(page.extractText())
# file is closed here, pdf will no longer do its job
am46iovg

am46iovg2#

我遇到了同样的错误,尝试将最后几行缩进with部分。找了两天后帮我工作。

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())

相关问题