ValueError:閉じたファイルのシーク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」オブジェクトに保存されているので、ブロック外でアクセスできるはずです。

狂った物理学者

PdfFileReaderシーク可能な、オープンな、蒸気を期待しています。ファイル全体をメモリにロードするわけではないため、のようなメソッドを実行するには、ファイルを開いたままにしておく必要がありますgetPageリーダーを作成するとファイル全体が自動的に読み込まれるという仮説は正しくありません。

with声明は、上で動作コンテキストマネージャファイルなど、。ときにwith終了すると、コンテキストマネージャの__exit__メソッドが呼び出されます。この場合、PdfFildReader2番目のページを取得するために使用しようとしているファイルハンドルを閉じます。

ご存知のように、正しい手順は、ファイルを閉じる前に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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ