How to close pyPDF “PdfFileReader” Class file handle

冷暖自知 提交于 2019-12-04 00:59:06

问题


this should be very simple question, for which I couldn't find answer by Google search: How to close file handle opened by pyPDF "PdfFileReader" Class

Here is snippet:

import os.path
from pyPdf import PdfFileReader

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

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

which raises error [32]

Thanks


回答1:


The operating system is preventing a file from being re-named while something else has it open. This is a Good Thing (tm).

Python's with statement will automatically close the file after you're done reading/manipulating it.

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

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

If you're still on Python 2.5, you'll have to do a special import:

from __future__ import with_statement

Python 2.6 and above have with enabled by default.




回答2:


If you really have to access this from the PdfFileReader object (that is: if you haven't got a reference to the file object yourself), you can use reader.stream.close()

Note that the PdfFileReader will need an open file object to access the pdf's content (it doesn't pull everything into memory from the start), so only close the file when you are done with the reader.




回答3:


I would sugest to handle the file open out of the PdfFileReader

Your code will be:

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:


instead using input=PdfFileReader(file(fname, "rb")) create an input stream like this

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

and when job is done use inputStream.close() then u will be able to call it through os package



来源:https://stackoverflow.com/questions/4422297/how-to-close-pypdf-pdffilereader-class-file-handle

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!