我正在尝试根据他们所在的县生成 pdf 文件。如果每个县有多个 pdf 文件,那么我需要根据县键将文件附加到一个文件中。我似乎无法根据密钥附加地图。生成的最终地图似乎是随机的,并且通常附加了太多的文件。我很确定我没有正确地将它们分组。我读过一个键中的多个值可能会导致多次显示。有人可以告诉我如何分别访问每个键的每个值,仅一次?显然我不理解一些关键的东西。
我的代码:
import csv, os
import shutil
from PyPDF2 import PdfFileMerger, PdfFileReader, PdfFileWriter
merged_file = PdfFileMerger()
counties = {'County4': ['C:\\maps\\map2.pdf', 'C:\\maps\\map3.pdf', 'C:\\maps\\map4.pdf'], 'County1': ['C:\\maps\\map1.pdf', 'C:\\maps\\map2.pdf'], 'County3': ['C:\\maps\\map3.pdf'], 'County2': ['C:\\maps\\map1.pdf', 'C:\\maps\\map3.pdf']}
for k, v in counties.items():
newPdfFile = ('C:\maps\JoinedMaps\k +'.pdf')
if len(v) > 1:
for filename in v:
merged_file.append(PdfFileReader(filename,'rb'))
merged_file.write(newPdfFile)
else:
for filename in v:
shutil.copyfile(filename, newPdfFile)
我输出了四张地图(这是正确的),但是其中一些文件中的“页面”(附加文件)的数量非常少。据我所知,这些页面的附加方式没有押韵或理由。County4 pdf 有 3 页(正确),County1 pdf 有 8 页而不是 2 页,County3 pdf 有 1 页(正确),County2 有 15 页而不是 2 页。
编辑:
事实证明 pyPDF2 不喜欢使用 group-by 的概念迭代和创建文件。我想它与它如何存储内存有关。结果是在您遍历键值时创建的页面数量越来越多。我花了几天时间认为这是我的编码。很高兴知道这不是我猜的,但我很惊讶这条信息并没有“在互联网上”更好。
我的解决方案是使用 arcpy,这对大多数用户阅读本文没有帮助,抱歉。
对于那些查看我的解决方案的人,我的 csv 文件如下所示:
County1 C:\maps\map1.pdf
County1 C:\maps\map2.pdf
County2 C:\maps\map1.pdf
County2 C:\maps\map3.pdf
County3 C:\maps\map3.pdf
County4 C:\maps\map2.pdf
County4 C:\maps\map3.pdf
County4 C:\maps\map4.pdf
我生成的 pdf 文件如下所示:
County-County1 (2 pages - Map1 and Map2)
County-County2 (2 pages - Map1 and Map3)
County-County3 (1 page - Map3)
County-County2 (3 pages - Map2, Map3, and Map4)