我希望通过创建pdf文件名列表将一些pdf文件附加到单个pdf中,然后使用该列表的名称将pdf文件合并为一个。
我有以下代码,它在文件名...
下的文件夹中返回pdf文件名import os
path = 'C:\\Users\\chinc\\Desktop\\pdf testing'
filenames = [f for f in os.listdir(path) if f.endswith('.pdf')]
filenames
我还发现了以下我尝试过的内容,以便我可以使用文件名列表而无需手动列出它们。这样做的原因是因为我会经常使用这个程序,pdf文件名将会改变,而我想要处理的pdf数量可能会达到数百。
from PyPDF2 import PdfFileMerger, PdfFileReader
merger = PdfFileMerger()
for filename in filenames:
merger.append(PdfFileReader(file(filename, 'rb')))
merger.write('C:\\Users\\chinc\\Desktop\\pdf testing\\123.pdf')
使用此代码会出现以下错误:
TypeError Traceback (most recent call last)
<ipython-input-15-5ae303d6f9cf> in <module>()
4
5 for filename in filenames:
----> 6 merger.append(PdfFileReader(file(filename, 'rb')))
7 merger.write('C:\\Users\\chinc\\Desktop\\pdf testing\\123.pdf')
TypeError: 'str' object is not callable
鉴于我在python方面的经验有限,我想知道我是否正确地解决了这个问题,因为我看到的所有附加示例已经使用了explitly文件名。我正在寻求现实吗?
答案 0 :(得分:0)
我建议检查pathlib库,因为它取代了os
库的大部分功能。如果你使用pathlib的glob函数,你将能够选择目录中的所有文件,然后使用pathlib的open函数打开它们。
试试这个:
from pathlib import Path
from PyPDF2 import PdfFileMerger, PdfFileReader
path = Path('C:\\test')
filenames = path.glob('*.pdf')
merger = PdfFileMerger()
for filename in filenames:
print(filename)
merger.append(PdfFileReader(filename.open('rb')))
merger.write('C:\\test\\merged\\merged.pdf')