我在父级文件夹中有一系列文件夹。每个文件夹都有几个.jpg格式的图像,名称按递增顺序排列(00.jpg,01.jpg ......)。
我想将每个图像转换为具有相同名称的pdf,然后将每个子文件夹的所有pdf合并到位于父文件夹中的单个pdf中,并将其命名为其pdf来自的子文件夹。
例如,父文件夹./Random草图具有子目录001风景草图到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'
答案 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()