迭代字典以合并 PDF、重命名

Iterate Over Dictionary to Combine PDFs, Rename

我正在尝试创建一个将 pdf 文件组合成单个文件的功能。我正在尝试使用如下构造的字典:

mydict = {"001 Pre-Op - Production Run Form - Shift-1-C.pdf":
            ['001 Pre-Op - Production Run Form - Shift-1-1.pdf',
            '001 Pre-Op - Production Run Form - Shift-1-2.pdf'],
            "001 Pre-Op - Production Run Form - Shift-2-C.pdf":
            ['001 Pre-Op - Production Run Form - Shift-2-1.pdf',
            '001 Pre-Op - Production Run Form - Shift-2-2.pdf']}

我想创建一个新的 pdf,其键名(即“001 Pre-Op - Production 运行 Form - Shift-1-C.pdf”)是通过结合两者创建的values (['001 Pre-Op - Production 运行 Form - Shift-1-1.pdf','001 Pre-Op - Production 运行 Form - Shift-1-2.pdf']) 每个键。我目前正在使用此代码合并值,重命名为键名,并删除作为 PDF 的“值”:

from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger, PdfFileReader
import pathlib
import shutil
import datetime
import os

merger = PdfFileMerger()

pdfs1 = ['001 Pre-Op - Production Run Form - Shift-1-1.pdf',
            '001 Pre-Op - Production Run Form - Shift-1-2.pdf']
try:
    for pdf in pdfs1:
        merger.append(pdf)
    merger.write("001 Pre-Op - Production Run Form - Shift-1-C.pdf")
    if os.path.exists("001 Pre-Op - Production Run Form - Shift-1-C.pdf"):
        [os.remove(f) for f in pdfs1]
    else:
        pass
except Exception:
    pass

pdfs2 = ['001 Pre-Op - Production Run Form - Shift-2-1.pdf',
            '001 Pre-Op - Production Run Form - Shift-2-2.pdf']
try:
    for pdf in pdfs2:
        merger.append(pdf)
    merger.write("001 Pre-Op - Production Run Form - Shift-2-C.pdf")
    if os.path.exists("001 Pre-Op - Production Run Form - Shift-2-C.pdf"):
        [os.remove(f) for f in pdfs2]
    else:
        pass
except Exception:
    pass

您可以看到,合并 PDF 并删除原始 PDF(如果能够合并)是一个非常手动的过程。这使得它非常容易出错,因为它是手动的。我的真实字典有 100 多个 keys/values 可供查找。

我正在寻找一种更符合 Python 风格的解决方案,它允许我使用字典组合、命名和删除 PDF。任何帮助将不胜感激!

我试过下面的循环但没有任何反应:

for k,v in mydict.items():
    try:
        for pdf in v:
            print(pdf)
            merger.append(pdf)
    except Exception:
        pass

问题不在于算法。

我自己不使用这个包,但我注意到你不使用

with # (requires the magic method __enter__ in PdfFileMerger) 

创建文件并自动关闭的语句,也不是PdfFileMerger。close()写入后的方法。

试试下面的代码:

for k, v in mydict.items():
    try:
        merger = PdfFileMerger()
        for pdf in v:
            print(pdf)
            merger.append(pdf)
        merger.write(k)
        merger.close()
        if os.path.exists(k):
            print(1)
    except Exception:
        pass