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