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

您所在的位置:网站首页 win10怎么让文件夹按大小排序 Python 对os.listdir()获取的文件列表进行 Windows 的按名称方式排序,natsort 库的应用

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

2023-06-29 07:56| 来源: 网络整理| 查看: 265

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的名称排序一致。

。 。 。 。 。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3