Python 对os.listdir()获取的文件列表进行 Windows 的按名称方式排序,natsort 库的应用

Python 对os.listdir()获取的文件列表进行 Windows 的按名称方式排序,natsort 库的应用

1.前言

日前,使用os.listdir()读取一个文件夹下的所有文件和子文件夹名称,但获得的名称列表和windows的资源管理器的排序并不一致,查了资料说是os.listdir()读取文件是乱序的,要用sorted()sort()方法排序才可以。然后我就按照方法两个函数都尝试了,但文件名称排序都没有和windows的资源管理器的排序一致。

进一步学习发现,windows的文件排序并不是单纯的按名称字符排序,文件名称有数字时会有一定的调整。

进一步查找资料发现,windows的排序可以叫自然排序,但又和自然排序有一点不一致。又找了一个第三方库,natsort,是nature sort的缩写。这个第三方库可以实现自然排序


2.实现文件名称自然排序

natsort是第三方库,如果之前没有安装可以pip install natsort安装。

测试代码:

from natsort import ns, natsorted
folder = r"D:\code_python\test_doc"
files = os.listdir(folder)

files_0 = sorted(files)
print('字符排序:')
print(files_0)

files_1 = natsorted(files,alg=ns.PATH)#要加alg=ns.PATH参数才和windows系统名称排序一致
print('自然排序:')
print(files_1)

print()输出结果:

字符排序:
['1.txt', '1啊.txt', '1比较.txt', '22_9.txt', '3_22.txt', 'AA.txt', 'a.txt', 'a1.txt', 'a啊.txt', 'b_8.txt', 'vdd.txt', 'ソラ.txt', 'プラネット.txt', '啊a.txt', '比.txt', '比较.txt', '比较1.txt', '比较3.txt', '比较5.txt', '比较6.txt', '比较a.txt', '比较c.txt']
自然排序:
['1.txt', '1啊.txt', '1比较.txt', '3_22.txt', '22_9.txt', 'AA.txt', 'a.txt', 'a1.txt', 'a啊.txt', 'b_8.txt', 'vdd.txt', 'ソラ.txt', 'プラネット.txt', '啊a.txt', '比.txt', '比较.txt', '比较1.txt', '比较3.txt', '比较5.txt', '比较6.txt', '比较a.txt', '比较c.txt']

测试文件夹截图:

image-20200802144316688

由结果可以印证,natsort 的 natsorted(files,alg=ns.PATH)方法可以实现自然排序,和windows的名称排序一致





评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值