如何关闭pyPDF的"PdfFileReader"类文件句柄

12 投票
4 回答
16698 浏览
提问于 2025-04-16 08:25

这个问题应该很简单,但我在谷歌上找不到答案:如何关闭由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语句。

撰写回答