目的
- 把一些图片转换成PDF
使用模块
os
re
PIL
# -*- coding: utf-8 -*-
# Time: 2021/4/5 14:59
import os
import re
from PIL import Image
def open_file_url(path):
# os.listdir 会得到目录下的文件名列表
file_name_list = os.listdir(path)
# print(file_name_list)
# 得到的文件名列表的顺序有点不符合预期, 所以要先进行一下排序
# re.findall(r"\d+")会根据正则在指定字符串内查找全部的数字,返回一个列表, "\d+" 表示查找数字
# 根据文件名的特征取出最后一个数字进行排序即可
file_name_list.sort(key=lambda x: int(re.findall(r"\d+", x)[-1]))
image_list = [] # 创建一个列表把通过 Image 打开的图片放入
pdf_poster = Image.open(path + "\\" + file_name_list[0]) # 打开第一张图片,这个图片可以看成生成PDF的封面
file_name_list.pop(0) # 为防止重复图片
for file_name in file_name_list:
# path 是传进来的文件夹路径, 所以在拼接上图片的名字就是文件夹下图片的完整路径
# print(file_name)
img_url = path + "\\" + file_name
print(img_url)
imgfile = Image.open(img_url)
image_list.append(imgfile)
pdf_poster.save("./一人之下第一话.pdf", 'pdf', save_all=True, append_images=image_list)
if __name__ == '__main__':
open_file_url(r"D:\QMDownload\photo\67一人之下漫画1.姐姐1")
问题-文件的排序
- 图片的排序
原始图片的排序, 在Python代码读取文件名时自动排的序如下, 可以看到序列与想象中的有些差异
使用列表的sort
方法以及re
模块的findall
方法进行自定义排序即可让文件安装指定文件名排序
# file_name_list 是文件名列表
# re.findall(r"\d+")会根据正则在指定字符串内查找全部的数字,返回一个列表, "\d+" 表示查找数字
# 根据文件名的特征取出最后一个数字进行排序即可
file_name_list.sort(key=lambda x: int(re.findall(r"\d+", x)[-1]))
根据文件名进行排序后