繁体   English   中英

按目录/文件夹合并pdf

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM