我有多個具有不同前綴的 PDF 檔案。我想根據第三個前綴(下劃線中的第三個值)合并這些 pdf 檔案。我想使用 python 庫 PyPDF2 來做到這一點。
例如:
0_2021_1_123.pdf
0_2021_1_1234.pdf
0_2021_1_12345.pdf
0_2021_2_123.pdf
0_2021_2_1234.pdf
0_2021_2_12345.pdf
預期結果
1_merged.pdf
2_merged.pdf
這是我嘗試過的,但出現錯誤并且無法正常作業。任何幫助深表感謝。
from PyPDF2 import PdfFileMerger
import io
import os
files = os.listdir("C:\\test\\raw")
x=0
merger = PdfFileMerger()
for filename in files:
print(filename.split('_')[2])
prefix = filename.split('_')[2]
if filename.split('_')[2] == prefix:
merger.append(filename)
merger.write("C:\\test\\result" prefix "_merged.pdf")
merger.close()
這是錯誤資訊
Traceback (most recent call last):
File "C:/test2.py", line 12, in <module>
merger.append(filename)
File "C:\py\lib\site-packages\PyPDF2\merger.py", line 203, in append
self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
File "C:\py\lib\site-packages\PyPDF2\merger.py", line 114, in merge
fileobj = file(fileobj, 'rb')
FileNotFoundError: [Errno 2] 沒有那個檔案或目錄:'0_2021_564495_12345.pdf'
行程以退出代碼 1 結束
uj5u.com熱心網友回復:
os.listdir()只列出檔案名;它不會包含目錄名稱。
要獲得實際添加到合并中的完整路徑,您必須os.path.join()回傳根路徑。
但是,您還需要注意,您從中獲取的檔案os.listdir()可能不一定按照您想要的前綴順序排列,因此最好重構事物,以便首先按前綴對事物進行分組,然后處理每個前綴組:
from collections import defaultdict
from PyPDF2 import PdfFileMerger
import os
root_path = "C:\\test\\raw"
result_path = "C:\\test\\result"
files_by_prefix = defaultdict(list)
for filename in os.listdir(root_path):
prefix = filename.split("_")[2]
files_by_prefix[prefix].append(filename)
for prefix, filenames in files_by_prefix.items():
result_name = os.path.join(result_path, prefix "_merged.pdf")
print(f"Merging {filenames} to {result_name} (prefix {prefix})")
merger = PdfFileMerger()
for filename in sorted(filenames):
merger.append(os.path.join(root_path, filename))
merger.write(os.path.join(result_path, f"{prefix}_merged.pdf"))
merger.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346954.html
