10

これは非常に単純な質問であるはずですが、Google 検索では答えが見つかりませんでした: pyPDF "PdfFileReader" クラスによって開かれたファイル ハンドルを閉じる方法

スニペットは次のとおりです。

import os.path
from pyPdf import PdfFileReader

fname = 'my.pdf'
input = PdfFileReader(file(fname, "rb"))

os.rename(fname, 'my_renamed.pdf')

エラーが発生する [32]

ありがとう

4

4 に答える 4

6

オペレーティング システムが、他の何かが開いているファイルの名前を変更できないようにしています。これは良いことです (tm)。

Python のwithステートメントは、ファイルの読み取り/操作が完了すると、ファイルを自動的に閉じます。

with open(fname, "rb") as f:
  input = PdfFileReader(f, "rb"))

os.rename(fname, 'my_renamed.pdf')

まだ Python 2.5 を使用している場合は、特別なインポートを行う必要があります。

from __future__ import with_statement

Python 2.6 以降では、デフォルトで有効になっています。

于 2012-02-20T04:39:21.390 に答える
4

PdfFileReaderオブジェクトからこれに本当にアクセスする必要がある場合(つまり、ファイルオブジェクトへの参照を自分で取得していない場合)、次を使用できます。reader.stream.close()

PdfFileReaderは、PDFのコンテンツにアクセスするために開いているファイルオブジェクトを必要とすることに注意してください(最初からすべてをメモリにプルするわけではありません)。したがって、リーダーを使い終わったときにのみファイルを閉じてください。

于 2012-02-20T15:24:14.343 に答える
1

PdfFileReader から開いているファイルを処理することをお勧めします

コードは次のようになります。

import os.path
from pyPdf import PdfFileReader

fname = 'my.pdf'
fh = file(fname, "rb")
input = PdfFileReader(fh)

fh.close()
os.rename(fname, 'my_renamed.pdf')
于 2013-02-20T11:32:45.737 に答える
0

代わりにinput=PdfFileReader(file(fname, "rb")) 、このような入力ストリームを作成します

inputStream=file(fname, "rb")
    input=PdfFileReader(inputStream)

仕事が終わっinputStream.close() たら、OSパッケージから呼び出すことができます

于 2015-04-03T12:12:43.100 に答える