我在下面使用将单独的PDF文件合并为一个PDF。
它工作正常,但所有PDF都打开了。如何关闭脚本结束时涉及的PDF文件(即4个文件,包括aaa,bbb,ccc和abc)?
例如f.clos()
,但我不知道如何插入此处。
from pyPdf import PdfFileWriter, PdfFileReader
def append_pdf(input,output):
[output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)]
output = PdfFileWriter()
append_pdf(PdfFileReader(file("C:\\aaa.pdf","rb")),output)
append_pdf(PdfFileReader(file("c:\\bbb.pdf","rb")),output)
append_pdf(PdfFileReader(file("c:\\ccc.pdf","rb")),output)
output.write(file("c:\\abc.pdf ","wb"))
问题在于,当我尝试删除文件时,Windows会弹出:
由于文件是在pythonw中打开的,因此无法完成操作
(我正在使用Python 2.76,因此将Robᵩ的第一次尝试改为inputFile.close()
)。
答案 0 :(得分:0)
脚本完成执行时,所有文件都会自动关闭。如果您想在脚本结束前关闭它们,请调用file.close()
功能。这是一种方式:
# UNTESTED
for fname in 'c:/aaa.pdf', 'c:/bbb.pdf', 'c:/ccc.pdf':
inputFile = open(fname, 'rb')
append_pdf(PdfFileReader(inputFile), output)
close(inputFile)
如您所见,每个输入文件在使用后立即关闭。但这确实会导致一个问题:如果PdfFileRead()
或append_pdf()
抛出异常,则永远不会调用close()
。为了解决这个问题,我们使用了一个上下文管理器:
# UNTESTED
for fname in 'c:/aaa.pdf', 'c:/bbb.pdf', 'c:/ccc.pdf':
with open(fname, 'rb') as inputFile:
append_pdf(PdfFileReader(inputFile), output)
当with
块退出时,每个文件都将关闭。
输出文件类似:
# UNTESTED
with open('c:/abc.pdf', 'wb') as outputFile:
output.write(outputFile)
答案 1 :(得分:0)
从这里了解到,pypdf Merging multiple pdf files into one pdf
发现使用PyPDF2可以实现相同的目标,并且无法删除文件的问题得到重新解决。from PyPDF2 import PdfFileMerger, PdfFileReader
merger = PdfFileMerger()
filenames = ['c:\\11.pdf', 'c:\\22.pdf', 'c:\\33.pdf']
for filename in filenames:
merger.append(PdfFileReader(file(filename, 'rb')))
merger.write('c:\\123.pdf')