1.背景
- 目前在做一个批量将图片插入ppt中的软件,所有的东西都已经写完了,功能也可以实现,但是做成的PPT页面非常混乱,与windows资源管理器中看到的顺序不一样。
- 通过查阅了很多文章,大部分都是提取名称的后几个数字排序,复杂的是使用正则表达排序。
- 经过调研可知,顺序混乱是由于使用
os.listdir()
读取文件夹下的文件,这个读取的结果是乱序的,使用sorted()
排序针对简单的纯数字名称是可以实现的,网上很多相关代码可以参考。但是对于负责的须使用正则表达,但是正则表达针对不同的文件名规律有不同的写法。 - 进一步调研,可以采用
自然排序
的方式,需调用第三方库natsort
。
2.操作流程
2.1 安装第三方库
pip install natsort -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com #从阿里云服务器获取第三方库
2.2 示例
代码示例
from natsort import ns, natsorted
import os
path = r"E:\code\picture2ppt"
list = os.listdir(path)
files = natsorted(list,alg=ns.PATH)
print(files)
Windows资源管理器中排列顺序:
输出结果
自然排序: ['t0.png', 't1.png', 't2.png', 't3.png', 't4.png', 't5.png', 't6.png', 't7.png', 't8.png', 't9A0.png', 't9B4.png', 't9C0.png', 't10.png', 't11A0.png', 't11B4.png', 't11C0.png', 't12A0.png', 't12B4.png', 't13A0.png', 't13B4.png', 't13C0.png', 't14A0.png', 't14B4.png', 't15A0.png', 't15B4.png', 't16A0.png', 't16B4.png', 't16C0.png', 't17.png', 't18A0.png', 't18A1.png', 't18B3.png', 't18B4.png', 't18C0.png', 't19.png', 't20A0.png', 't20A1.png', 't20B4.png', 't20C0.png', 't21A0.png', 't21B4.png', 't21C0.png', 't22A0.png', 't22A1.png', 't22B4.png', 't22C0.png', 't23A0.png', 't23B4.png', 't23C0.png', 't24A0.png', 't24B4.png', 't24C0.png', 't25A0.png', 't25B4.png', 't25C0.png', 't26A0.png', 't26B4.png', 't26C0.png', 't27.png', 't28.png', 't29A0.png', 't29A1.png', 't29B4.png', 't29C0.png', 't30A0.png', 't30A1.png', 't30B4.png', 't30C0.png', 't31A0.png', 't31B3.png', 't31B4.png', 't31C0.png', 't32A0.png', 't32B4.png', 't32C0.png', 't33A0.png', 't33B4.png', 't34A0.png', 't34A1.png', 't34B3.png', 't34B4.png', 't34C0.png', 't35A0.png', 't35B4.png', 't35C0.png', 't36A0.png', 't36B4.png', 't36C0.png', 't37A0.png', 't37B4.png', 't37C0.png', 't38.png']
随机排序: ['t0.png', 't1.png', 't10.png', 't11A0.png', 't11B4.png', 't11C0.png', 't12A0.png', 't12B4.png', 't13A0.png', 't13B4.png', 't13C0.png', 't14A0.png', 't14B4.png', 't15A0.png', 't15B4.png', 't16A0.png', 't16B4.png', 't16C0.png', 't17.png', 't18A0.png', 't18A1.png', 't18B3.png', 't18B4.png', 't18C0.png', 't19.png', 't2.png', 't20A0.png', 't20A1.png', 't20B4.png', 't20C0.png', 't21A0.png', 't21B4.png', 't21C0.png', 't22A0.png', 't22A1.png', 't22B4.png', 't22C0.png', 't23A0.png', 't23B4.png', 't23C0.png', 't24A0.png', 't24B4.png', 't24C0.png', 't25A0.png', 't25B4.png', 't25C0.png', 't26A0.png', 't26B4.png', 't26C0.png', 't27.png', 't28.png', 't29A0.png', 't29A1.png', 't29B4.png', 't29C0.png', 't3.png', 't30A0.png', 't30A1.png', 't30B4.png', 't30C0.png', 't31A0.png', 't31B3.png', 't31B4.png', 't31C0.png', 't32A0.png', 't32B4.png', 't32C0.png', 't33A0.png', 't33B4.png', 't34A0.png', 't34A1.png', 't34B3.png', 't34B4.png', 't34C0.png', 't35A0.png', 't35B4.png', 't35C0.png', 't36A0.png', 't36B4.png', 't36C0.png', 't37A0.png', 't37B4.png', 't37C0.png', 't38.png', 't4.png', 't5.png', 't6.png', 't7.png', 't8.png', 't9A0.png', 't9B4.png', 't9C0.png']
总结
可以看到结果是符合我们的需求的。