PDF无需手动创建列表即可从列表中追加

时间:2018-03-11 17:24:21

标签: python list pdf append

我希望通过创建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文件名。我正在寻求现实吗?

1 个答案:

答案 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')