我有一个文件夹('b')的文件夹('a')。 “ b”中的每个文件夹均以其涵盖的合同命名。 b的每个文件夹中都有主合同文件和该合同的修改。所有文档均为pdf。我写了代码以按合同合并pdf。
问题是代码没有正确分解pdf。第一个输出仅包含合同1的信息。第二个输出具有合同1和2的信息;第三份合同包含有关合同1、2和3的信息。我尝试从战略上放置一行代码来清除存储设备,但该代码仍无法正常工作。
root_folder = r"./RawContracts"
x = [a for a in os.listdir(root_folder) if not a.endswith(".pdf")]
merger = PdfFileMerger()
for folder in x:
house = root_folder + "/" + folder
x2 = [root_folder+"/"+folder+"/"+a for a in os.listdir(house) if a.endswith(".pdf")]
for pdf in x2:
merger.append(open(pdf, 'rb'))
with open("%s.pdf" % folder, "wb") as fout:
merger.write(fout)
x2 = []
在引用许多不同的站点后,我将这个解决方案拼凑在一起。我在第二个for循环末尾的“ x2 = []”是我尝试解决的问题。这是行不通的。预先感谢您的帮助。
关于此问题的更多细节。
比方说,contract1文件夹包含2个与contract1相关的单独pdf(每个页面1页):pdf1 =“ 4台电脑只要$ 1000”pdf2 =“ Mod1:3台计算机@ $ 825; 4台@ $ 1000已取消”]
contract2文件夹包含2个与contract2相关的单独pdf(每个页面1页):pdf1 =“ 5个小部件,价格为$ 45”pdf2 =“运动选项3而不是选项2”
所需的输出:
1个合并的pdf,名为contract1.pdf,其中包含contract1_pdf1和contract1_pdf21个合并的pdf,名为contract2.pdf,其中包含contract2_pdf1和contract2_pdf2
当前输出:
1 pdf,contract1文件夹的内容已正确合并1个pdf,其中contract1文件夹的内容与contract2文件夹的内容合并。此文件夹应仅包含合同2的内容。
一旦完成循环的那一部分,我需要python将与contract1有关的所有内容从其内存中丢弃。
使用.txt运行代码进行测试后,似乎问题出在merger
对象上。似乎在循环中,您对循环中的每个文件都执行了merger.append(open(pdf, 'rb'))
,但是在每个循环的开始时,您并未清除merger
。
我不确定您如何清除合并变量,但我怀疑在第一个for循环之后放置的行merger = PdfFileMerger()
会很好。
您的代码如下所示:
root_folder = r"./RawContracts"
x = [a for a in os.listdir(root_folder) if not a.endswith(".pdf")]
for folder in x:
merger = PdfFileMerger()
house = root_folder + "/" + folder
# note that we removed x2 = [], because the following line re-sets x2 anyway
x2 = [root_folder+"/"+folder+"/"+a for a in os.listdir(house) if a.endswith(".pdf")]
for pdf in x2:
merger.append(open(pdf, 'rb'))
with open("%s.pdf" % folder, "wb") as fout:
merger.write(fout)
如果无法按预期工作,则可以尝试按merger.close()
来查看是否擦除了合并内存,如this文档中所示。
希望有帮助!