Ходить в подкаталогах, конвертировать изображения в PDF, а затем объединить PDF - PullRequest
0 голосов
/ 21 мая 2018

У меня есть несколько папок внутри родительской.Каждая папка имеет несколько изображений в формате .jpg с именем в порядке возрастания (00.jpg, 01.jpg ...).

Я хочу преобразовать каждое изображение в pdf с тем же именем, а затем объединить всеPDF-файлы каждой вложенной папки в один PDF-файл, расположенный в родительской папке и названный в качестве вложенной папки, из которой получены ее PDF-файлы.

Например, в папке «Родительская папка ./Random» имеются подкаталоги 001 эскизов ландшафта к 099 городским эскизам.Поэтому я хочу преобразовать изображения в каждой подпапке, а затем объединить PDF-файлы с названиями 001-ландшафтов в городские эскизы 099.

Я в порядке с преобразованием изображений в 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'

1 Ответ

0 голосов
/ 21 мая 2018

Я не вижу, где вы создаете объект 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()
...