【问题标题】:PDF appending from a list without manually creating the list无需手动创建列表即可从列表追加 PDF
【发布时间】:2018-03-13 20:05:54
【问题描述】:

我希望通过创建 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 方面的有限经验,我想知道我是否正确地处理了这个问题,因为我看到的所有附加示例都明确指出了正在使用的文件名。我所期待的是否现实?

【问题讨论】:

  • 您没有正确打开文件。您需要先打开每个文件名的文件。我还建议使用 glob('*.pdf') 来定位您的文件。
  • 您是否尝试使用语句file(filename, 'rb') 打开文件?

标签: python list pdf append


【解决方案1】:

我建议查看 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')

【讨论】:

  • 迈克,这是漂亮的编码。它非常适合我想要实现的目标。非常感谢。
  • 很高兴你喜欢它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2018-07-15
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多