我有以下问题。
我有这样的文件夹结构:
vol1/
chap1/
01.jpg
02.JPG
03.JPG
chap2/
04.JPG
05.jpg
06.jpg
chap3/
07.JPG
08.jpg
09.JPG
vol2/
chap4/
01.JPG
02.jpg
03.jpg
chap5/
04.jpg
05.JPG
06.jpg
chap6/
07.jpg
08.JPG
09.jpg
在单个vol
文件夹中,章节的顺序是递增的,每个chap
文件夹中的jpg文件也是如此。
现在,我想为每个vol
文件夹获取一个pdf,维护图片的顺序。把它想象成一个分开的漫画或漫画卷,放回一个文件中。
我怎么能在bash或python中做到这一点?我不知道我有多少卷,一卷中有多少章,一章中有多少jpg文件。换句话说,我需要它来处理任何数量的卷/章/jpgs。
一个附加功能是考虑异构图片文件,可能在一章中同时包含jpg和png,但这是一个优点。
我想这应该像预期的那样工作!如果你遇到问题,请告诉我
import os
from PIL import Image
def merge_into_pdf(paths, name):
list_image = []
# Create list of images from list of path
for i in paths:
list_image.append(Image.open(i).convert("RGB"))
# merge into one pdf
if len(list_image) == 0:
return
# get first element of list and pop it from list
img1 = list_image[0]
list_image.pop(0)
# append all images and save as pdf
img1.save(f"{name}.pdf",save_all=True, append_images=imagelist)
def main():
# List directory
directory = os.listdir(".")
for i in directory:
# if directory start with 'vol' iterate through it
if i.find("vol") != -1:
path = []
sub_dir = os.listdir(i)
# for each subdirectory
for j in sub_dir:
files = os.listdir(f"{i}/{j}")
for k in files:
# if file ends with jpg or png append to list
if k.endswith((".jpg", ".JPG", ".png", ".PNG")):
path.append(f"{i}/{j}/{k}")
# merge list into one pdf
merge_into_pdf(path, i)
if __name__ == "__main__":
main()