问题描述
我有一个Alpha文件夹,其中包含一系列名为Beta1,Beta2,...,Beta 397的文件夹。每个Beta文件夹都包含可变数量的不同文件格式的字母数字编号的图像。
我的目标是运行一个脚本,对所有这些Beta文件夹进行爬网,有选择地选择jpeg / png格式的图像,并在名称排序后将它们合并为pdf(对于每个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