如何关闭pyPDF的"PdfFileReader"类文件句柄
这个问题应该很简单,但我在谷歌上找不到答案:如何关闭由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 个回答
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')
4
如果你真的必须从PdfFileReader对象中访问这个内容(也就是说:如果你自己没有文件对象的引用),你可以使用reader.stream.close()
。
请注意,PdfFileReader需要一个打开的文件对象才能访问pdf的内容(它不会一开始就把所有内容都加载到内存中),所以只有在你用完reader后才关闭文件。
7
操作系统不允许在文件被其他程序打开时对其进行重命名。这是个好事。
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及以上版本默认就支持with语句。