行走子目录,将图像转换为pdf然后合并pdf

时间:2018-05-21 12:31:05

标签: python python-3.x pdf merge os.walk

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

我想将每个图像转换为具有相同名称的pdf,然后将每个子文件夹的所有pdf合并到位于父文件夹中的单个pdf中,并将其命名为其pdf来自的子文件夹。

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

我将转换图像转换为pdf很好,但是我不能使用循环合并它们,即使我在单个子文件夹上尝试相同的代码它也是如此(因此无需循环遍历不同的文件夹)。 / p>

我无法理解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'

1 个答案:

答案 0 :(得分:0)

我不知道你在哪里创建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()