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']
测试文件夹截图:
由结果可以印证,
natsort 的 natsorted(files,alg=ns.PATH)
方法可以实现自然排序,和windows
的名称排序一致。
。
。
。
。
。