[英]Merging pdfs by directory/folder
我有一个文件夹('a')的文件夹('b')。 “b”中的每个文件夹都以其涵盖的合同命名。 在 b 中的每个文件夹中是主合同文档和该合同的修改。 所有文档都是pdf。 我编写了代码来按合同合并 pdf。
问题是代码没有正确分解pdf。 第一个 output 只有合约 1 的信息; 第二个 output 有合同 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文件夹包含与contract1有关的2个单独的pdf(每个有1页):pdf1 =“4台电脑,1000美元”pdf2 =“Mod1:3台电脑@825美元;4@1000美元取消”
contract2 文件夹包含与 contract2 相关的 2 个单独的 pdf(每个 1 页): pdf1 = “5 个小部件,售价 45 美元” pdf2 = “行使选项 3 而不是选项 2”
所需的 output:
1 merged pdf named contract1.pdf containing contract1_pdf1 and contract1_pdf2 1 merged pdf named contract2.pdf containing contract2_pdf1 and contract2_pdf2
当前 output:
1 pdf 与contract1 文件夹的内容正确合并 1 pdf 与contract1 文件夹的内容与contract2 文件夹的内容合并。 这个文件夹应该只有合同 2 的东西。
一旦完成循环的那一部分,我需要 python 从其 memory 中丢弃与contract1有关的所有内容。
在使用.txt 运行代码进行测试后,似乎问题可能出在您的merger
object 上。 似乎在您的循环中,您对循环中的每个文件都执行merger.append(open(pdf, 'rb'))
,但是在每个循环开始时,您并没有清除merger
。
例如。 如果我有这样的文件夹结构:
我的合并,如果它像一个列表,会以 3 次合并结束:
['./randomtextfolder/1/1_1.txt', './randomtextfolder/1/1_2.txt']
['./randomtextfolder/1/1_1.txt', './randomtextfolder/1/1_2.txt', './randomtextfolder/2/2_1.txt', './randomtextfolder/2/2_2.txt']
['./randomtextfolder/1/1_1.txt', './randomtextfolder/1/1_2.txt', './randomtextfolder/2/2_1.txt', './randomtextfolder/2/2_2.txt', ' ./randomtextfolder/3/3_1.txt']
我不确定您将如何清除 merge 变量,但我怀疑放在第一个 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()
以查看是否会擦除合并 memory,如本文档中所述。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.