4

我正在编写一个 python 脚本来将多个 PDF 合并为一个以放入输出文件夹。每个 PDF 将位于一个带有员工姓名的不同文件夹中,并且需要与另一个文件夹中的相应 pdf 合并。并非所有员工都会拥有每个文件,因此我将其包含在逻辑中。

我目前遇到的问题是 PdfFileMerger 在附加文件时需要一个字符串,并且 pathlib 库返回一个 windowpath 对象。这不会轻易转换为字符串。我从这篇文章pypdf Merging multiple pdf files into one pdf中获得了有关 PyPDF2 的信息。我是 pathlib 库的新手,我应该进行转换还是应该获得不同的路径对象?

from PyPDF2 import PdfFileMerger, PdfFileReader
from pathlib import Path

tc = Path('totalcomp')
merger = PdfFileMerger()


for i in tc.iterdir():
pdfs = []
try:
    pdfs.append(Path(f'profitshare/{i.name}'))
    pdfs.append(Path(f'merit/{i.name}'))
finally:
    pdfs.append(i)
    for pdf in pdfs:
        output = i.name
        merger.append(pdf, 'rb')
    merger.write(Path(f'/output/{i.name}'))
4

1 回答 1

3

根据pathlib 文档

路径的字符串表示是原始文件系统路径本身(以本机形式,例如在 Windows 下带有反斜杠),您可以将其传递给将文件路径作为字符串的任何函数:

>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'

所以解决方案是用函数包装Path()对象:str()

from PyPDF2 import PdfFileMerger, PdfFileReader
from pathlib import Path

tc = Path('totalcomp')
merger = PdfFileMerger()


for i in tc.iterdir():
pdfs = []
try:
    pdfs.append(str(Path(f'profitshare/{i.name}')))
    pdfs.append(str(Path(f'merit/{i.name}')))
finally:
    pdfs.append(i)
    for pdf in pdfs:
        output = i.name
        merger.append(pdf, 'rb')
    merger.write(str(Path(f'/output/{i.name}')))

顺便说一句,还有另一种 pathlib 的方法,它以字符串形式返回路径:as_posix()

返回带有正斜杠 (/) 的路径的字符串表示形式:

>>>
>>> p = PureWindowsPath('c:\\windows')
>>> str(p)
'c:\\windows'
>>> p.as_posix()
'c:/windows'
于 2020-05-06T16:08:18.273 回答