遍历目录并从图像创建 pdf

Walk directories and create pdf from images

我有一个文件夹 Alpha,其中包含一系列名为 Beta1、Beta2、...、Beta 397 的文件夹。每个 Beta 文件夹都包含数量不定的不同文件格式的按字母数字编号的图像。

我的目标是 运行 一个脚本,该脚本可以抓取所有这些 Beta 文件夹,有选择地选择 jpeg/png 格式的图像,并在名称排序后将它们合并为 pdf(每个 Beta 文件夹)。

我的代码与 Beta 文件夹一起存储并读取:-

import glob
import re
import img2pdf
import os

_nsre = re.compile('([0-9]+)')
def natural_sort_key(s):
    return [int(text) if text.isdigit() else text.lower()
            for text in re.split(_nsre, s)]
            
for X in range(1, 397):
   dirname = os.path.join('./','BetaX', '')
   output  = os.path.join('./','BetaX', '/output.pdf')

   # Get all the filenames per image format
   filenames1 = [f for f in glob.iglob(f'{dirname}*.jpg')]
   filenames2 = [f for f in glob.iglob(f'{dirname}*.png')]
   # Merges the 2 lists
   filenames3 = filenames1 + filenames2 
   # Sort the list alphanumerically
   filenames3.sort(key=natural_sort_key)
   # Print to pdf
   with open(output,"wb") as f:
       f.write(img2pdf.convert(filenames3))
   print(f'Finished converting {output}')
   filenames1.clear()
   filenames2.clear()
   filenames3.clear() 

如果我删除 for 循环行并键入 X 的值,pdf 将在单个文件夹的基础上毫不费力地输出。但是,我正在寻找将 X 视为范围内的循环变量并一次批处理所有文件夹的方法。

您目前的代码方式:

for X in range(1, 397):
    dirname = os.path.join('./','BetaX', '')
    output  = os.path.join('./','BetaX', '/output.pdf')

X只是字符串BetaX中的一个字符。您需要使 X 被视为整数值,然后您需要将该值连接到 Beta 以得出完整的文件夹名称。

此外,您不希望在传递给 os.path.join 的内容中出现斜杠。 join 调用的要点是隐藏路径分隔符的详细信息。 output 的值将只是 /output.pdf 与你所拥有的,因为第三个参数将被视为绝对路径,因为它前面有斜线。

这是解决了这两个问题的那部分代码:

for X in range(1, 397):
    dirname = os.path.join('.','Beta' + str(X), '')
    output  = os.path.join('.','Beta' + str(X), 'output.pdf')