【发布时间】:2018-05-21 12:31:05
【问题描述】:
我在父文件夹中有一系列文件夹。每个文件夹都有几张 .jpg 格式的图片,名称按升序排列(00.jpg、01.jpg...)。
我想将每个图像转换为同名的 pdf,然后将每个子文件夹的所有 pdf 合并为位于父文件夹中的单个 pdf,并命名为其 pdf 来自的子文件夹。
例如,父文件夹 ./Random sketches 具有子目录 001 Landscapes sketches 到 099 urban sketches。所以我想转换每个子文件夹中的图像,然后将名为 001 风景的 pdf 合并为 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'
【问题讨论】:
-
写入方法需要一个文件对象
-
我知道,但我认为“子文件夹+'.pdf'”应该覆盖它
-
不,这行不通
标签: python python-3.x pdf merge os.walk