使用基于文件迭代器的输入将 PDF 与 PyPDF2 合并
Merging PDF's with PyPDF2 with inputs based on file iterator
我有两个具有相同文件名的 PDF 文件夹。我想遍历第一个文件夹,获取文件名的前 3 个字符,将其设为 'current' 页面名称,然后使用该值从两个文件夹中获取 2 个相应的 PDF,合并它们,并将它们写入第三个文件夹。
下面的脚本在第一次迭代时按预期工作,但之后,后续合并的 PDF 包括所有以前的 PDF(在 8 次迭代中迅速膨胀到 72 页)。
其中一些可能是由于代码不当造成的,但我无法弄清楚它在哪里,或者如何清除可能导致每次迭代仅写入 2 页失败的 inputs/outputs:
import os
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
rootdir = 'D:/Python/Scatterplots/BoundaryEnrollmentPatternMap'
for subdir, dirs, files in os.walk(rootdir):
for currentPDF in files:
#print os.path.join(file[0:3])
pagename = os.path.join(currentPDF[0:3])
print "pagename is: " + pagename
print "File is: " + pagename + ".pdf"
input1temp = 'D:/Python/Scatterplots/BoundaryEnrollmentPatternMap/' + pagename + '.pdf'
input2temp = 'D:/Python/Scatterplots/TraditionalScatter/' + pagename + '.pdf'
input1 = open(input1temp, "rb")
input2 = open(input2temp, "rb")
merger.append(fileobj=input1, pages=(0,1))
merger.append(fileobj=input2, pages=(0,1))
outputfile = 'D:/Python/Scatterplots/CombinedMaps/Sch_' + pagename + '.pdf'
print merger.inputs
output = open(outputfile, "wb")
merger.write(output)
output.close()
#clear all inputs - necessary?
outputfile = []
output = []
merger.inputs = []
input1temp = []
input2temp = []
input1 = []
input2 = []
print "done"
我的代码/工作基于此示例:
https://github.com/mstamy2/PyPDF2/blob/master/Sample_Code/basic_merging.py
我认为错误是 merger
在循环之前初始化并且它累积了所有文档。尝试将行 merger = PdfFileMerger()
移动到循环体中。 merger.inputs = []
在这种情况下似乎没有帮助。
关于您的代码有几点说明:
input1 = []
不关闭文件。这将导致许多文件被程序打开。您应该改为调用 input1.close()
。
[]表示空数组。如果变量不应包含任何有意义的值,最好使用 None。
要删除变量(例如 output
),请使用 del output
。
毕竟没有必要清除所有变量。它们将被垃圾收集器释放。
使用os.path.join创建input1temp和input2temp。
我有两个具有相同文件名的 PDF 文件夹。我想遍历第一个文件夹,获取文件名的前 3 个字符,将其设为 'current' 页面名称,然后使用该值从两个文件夹中获取 2 个相应的 PDF,合并它们,并将它们写入第三个文件夹。
下面的脚本在第一次迭代时按预期工作,但之后,后续合并的 PDF 包括所有以前的 PDF(在 8 次迭代中迅速膨胀到 72 页)。
其中一些可能是由于代码不当造成的,但我无法弄清楚它在哪里,或者如何清除可能导致每次迭代仅写入 2 页失败的 inputs/outputs:
import os
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
rootdir = 'D:/Python/Scatterplots/BoundaryEnrollmentPatternMap'
for subdir, dirs, files in os.walk(rootdir):
for currentPDF in files:
#print os.path.join(file[0:3])
pagename = os.path.join(currentPDF[0:3])
print "pagename is: " + pagename
print "File is: " + pagename + ".pdf"
input1temp = 'D:/Python/Scatterplots/BoundaryEnrollmentPatternMap/' + pagename + '.pdf'
input2temp = 'D:/Python/Scatterplots/TraditionalScatter/' + pagename + '.pdf'
input1 = open(input1temp, "rb")
input2 = open(input2temp, "rb")
merger.append(fileobj=input1, pages=(0,1))
merger.append(fileobj=input2, pages=(0,1))
outputfile = 'D:/Python/Scatterplots/CombinedMaps/Sch_' + pagename + '.pdf'
print merger.inputs
output = open(outputfile, "wb")
merger.write(output)
output.close()
#clear all inputs - necessary?
outputfile = []
output = []
merger.inputs = []
input1temp = []
input2temp = []
input1 = []
input2 = []
print "done"
我的代码/工作基于此示例:
https://github.com/mstamy2/PyPDF2/blob/master/Sample_Code/basic_merging.py
我认为错误是 merger
在循环之前初始化并且它累积了所有文档。尝试将行 merger = PdfFileMerger()
移动到循环体中。 merger.inputs = []
在这种情况下似乎没有帮助。
关于您的代码有几点说明:
input1 = []
不关闭文件。这将导致许多文件被程序打开。您应该改为调用input1.close()
。[]表示空数组。如果变量不应包含任何有意义的值,最好使用 None。
要删除变量(例如
output
),请使用del output
。毕竟没有必要清除所有变量。它们将被垃圾收集器释放。
使用os.path.join创建input1temp和input2temp。