按目录/文件夹合并pdf文件

问题描述 投票:0回答:1

我有一个文件夹('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有关的所有内容从其内存中丢弃。

python
1个回答
0
投票

使用.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文档中所示。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.