遍历目录并从图像创建pdf

问题描述

我有一个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('./','/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视为范围内的循环变量并立即批量处理所有文件夹的方法

解决方法

当前代码的方式:

cat {file} >> {output}

for X in range(1,397): dirname = os.path.join('./','BetaX','') output = os.path.join('./','/output.pdf') 只是字符串X中的一个字符。您需要将BetaX视为一个整数值,然后需要将该值连接到X上以提供完整的文件夹名称。

此外,您也不想在传递给Beta的内容中使用斜线。 os.path.join调用的目的是隐藏路径分隔符的详细信息。 join的值将与您拥有的值恰好为output,因为第三个参数由于其前面的斜杠而被视为绝对路径。

这是您的代码的一部分,同时解决了以下两个问题:

/output.pdf