【问题标题】:How to combine / append PDFs according to name of file?如何根据文件名组合/附加PDF?
【发布时间】:2019-10-16 21:22:01
【问题描述】:

我有一堆以部门名称开头的文件。我希望每个科室都有一个文件,所以我有 1 个麻醉大文件和 1 个皮肤科大文件,而不是 4 个麻醉文件和 4 个皮肤科文件。

现在下面的代码将知道如何创建两个文件。但不知道何时正确停止追加一个部门并开始一个新部门。我现在有两个文件。一个具有所有麻醉(并且看起来不错)并停止的人。还有一个皮肤科文件,但它包含麻醉文件和皮肤文件。

有没有办法在我的循环中重新启动附加起点。抱歉,我在这里不太擅长列表/循环:

import os
from PyPDF2 import PdfFileMerger


department_list =['Anesthesiology','Dermatology']
file_dict = {}
for subdir, dirs, files in os.walk("C:/Users/username/Documents/Tests"):
    for file in files:
        filepath = subdir + os.sep + file
        for dept in department_list:
            if filepath.__contains__(dept):
                file_dict[file] = filepath
                merger = PdfFileMerger(strict=False)
                for k, v in file_dict.items():
                    print(k, v)
                    merger.append(v)
                    merger.write(dept + ' combined_result.pdf')

【问题讨论】:

    标签: python list loops pdf pdf-generation


    【解决方案1】:

    您正在浏览文件并检查它们是否属于部门。

    但是,您正在创建一个单独的 file_dict,它保存属于 不同 部门的 所有 文件,而不仅仅是单个部门的文件。

    您需要将合并移出将文件分配给部门的循环。更优雅的解决方案是通过 glob.glob() 最初按部门匹配文件并避免双重循环,但这也意味着需要重写。

    更改现有代码的最简单方法(但可以改进):

    file_dict={ dept:{} for dept in department_list } # seed file_dict with departments
    for subdir, dirs, files in os.walk("C:/Users/username/Documents/Tests"):
        for file in files:
            filepath = os.path.join(subdir,file) # note changed check
            for dept in department_list: 
                if dept in filepath: #note changed from __contains__. Usually you needn't call __ funcs in your code
                    file_dict[dept][file] = filepath
    
    for dept in department_list:
        merger = PdfFileMerger(strict=False)
        for k, v in file_dict[dept].items():
           print(k, v)
           merger.append(v)
        merger.write(dept + ' combined_result.pdf')
    

    【讨论】:

    • 几乎可以工作!你的分裂它......但每次匹配时它都会从头开始添加/附加所有内容。所以说有4份皮肤病学报告。合并的报告获取报告 (1),然后添加报告 (1)(2),然后是 (1)(2)(3),然后是报告 (1)(2)(3)(4)
    • @pjhollow 请编辑您的帖子以包含一些带有目录的实际文件名示例。您可以隐藏任何机密信息,但我希望看到包含部门的目录和文件名示例
    • 让它工作。 merge.write 最后只是多了一个标签。
    猜你喜欢
    • 2019-10-05
    • 2021-02-11
    • 2019-11-08
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多