走子目录,把图片转成pdf然后合并pdf

Walking subdirectories, converting images into pdf and then merging the pdf

我在一个父文件夹中有一系列文件夹。每个文件夹都有几张 .jpg 格式的图像,名称按递增顺序排列 (00.jpg、01.jpg...)。

我想将每个图像转换成同名的 pdf,然后将每个子文件夹的所有 pdf 合并到位于父文件夹中的单个 pdf,并以其 pdf 所在的子文件夹命名。

例如,父文件夹./Random sketches 有子目录00​​1 landscapes sketches 到099 urban sketches。所以我想转换每个子文件夹中的图像,然后将名为 001 landscapes 的 pdf 合并为 099 urban sketches。

我可以将图像转换为 pdf,但我无法使用循环合并它们,即使当我在单个子文件夹上尝试相同的代码时它起作用了(因此无需循环遍历不同的文件夹) .

我无法理解 os.walk() 的工作原理,所以我改用 os.listdir()。

这是我当前的工作代码:

import os
import shutil
import img2pdf
from send2trash import send2trash
import re
from PyPDF2 import PdfFileMerger as merger

parent_folder = '/Users/macbook/Documents/Random sketches/'
os.chdir(parent_folder)
for subfolder in os.listdir(parent_folder):
    if os.path.isdir(parent_folder + subfolder):
        for filename in os.listdir(parent_folder + subfolder):
            if filename.endswith(('.jpg', '.JPG')):
                filename_regex = re.compile(r'(\.jpg)|(\.jpeg)', re.IGNORECASE)
                new_name = filename_regex.sub('', filename)
                f = open(parent_folder + subfolder + '/' + new_name + '.pdf', 'wb')
                f.write(img2pdf.convert(parent_folder + subfolder + '/' + filename))
                send2trash(parent_folder + subfolder + '/' + filename)

for subfolder in os.listdir(parent_folder):
    if os.path.isdir(parent_folder + subfolder):
        for file in os.listdir(parent_folder + subfolder):
                if file.endswith('.pdf'):
                    merger.append(file)
    merger.write(subfolder +'.pdf')

但是,我收到错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-c489b353ceda> in <module>()
     23                 if file.endswith('.pdf'):
     24                     merger.append(file)
---> 25     merger.write(subfolder +'.pdf')

TypeError: write() missing 1 required positional argument: 'fileobj'

我没看到您在哪里创建 PdfFileMerger 对象。我认为您不能将其导入为 merger。如果将代码修改为:

会发生什么
from PyPDF2 import PdfFileMerger

...

for subfolder in os.listdir(parent_folder):
    merger = PdfFileMerger()
    if os.path.isdir(parent_folder + subfolder):
        for file in os.listdir(parent_folder + subfolder):
                if file.endswith('.pdf'):
                    merger.append(file)
    merger.write(subfolder +'.pdf')
    merger.close()