迭代字典以合并 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
我正在尝试创建一个将 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