ValueError:查找关闭的文件在PyPDF2上工作并得到此错误

时间:2019-05-05 11:21:47

标签: python python-3.x pypdf2

我正在尝试从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”对象中,因此我应该能够在块外部访问它。

1 个答案:

答案 0 :(得分:1)

PdfFileReader希望获得开放的动力。它不会将整个文件加载到内存中,因此您必须保持打开状态以运行诸如getPage之类的方法。您关于创建阅读器会自动读取整个文件的假设是错误的。

with语句对context manager(例如文件)进行操作。 sum结束时,将调用上下文管理器的arr方法。在这种情况下,它将关闭int sumOfAllLater = 0; for (int i = n - 1; i >= 0; --i) { sum[i] += sumOfAllLater; sumOfAllLater += arr[i]; } 试图用来获取第二页的文件句柄。

您发现,正确的过程是在关闭文件之前从PDF读取必需的内容。当且仅当您的程序需要打开PDF至最后时,才可以将文件名直接传递给with。不过,此后没有(记录的)关闭文件的方法,所以我建议您使用原始方法:

__exit__