如何关闭pyPDF“PdfFileReader”类文件句柄

时间:2010-12-12 15:09:58

标签: python pypdf

这应该是一个非常简单的问题,我无法通过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 个答案:

答案 0 :(得分:5)

操作系统阻止文件在其他内容打开时重新命名。这是一件好事(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及更高版本默认启用。

答案 1 :(得分:4)

如果你真的必须从PdfFileReader对象访问它(即:如果你自己没有对文件对象的引用),你可以使用reader.stream.close()

请注意,PdfFileReader需要一个打开的文件对象来访问pdf的内容(它不会从一开始就将所有内容都拉入内存),因此只有在完成阅读器后才能关闭文件。

答案 2 :(得分: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')

答案 3 :(得分:0)

改为使用input=PdfFileReader(file(fname, "rb")) 像这样创建一个输入流

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

当工作完成后,使用inputStream.close() 那么你将能够通过os包

来调用它