如何在python中使用natsort对文件夹名称进行排序?

如何在python中使用natsort对文件夹名称进行排序?,python,natsort,Python,Natsort,我有三个文件夹,它们的名称是[“-folder2-”,“-folder1-”,“=Folder-”] 当我使用“排序”或在窗口中时,它返回[“-folder-”、“-folder1-”、“-folder2-”]。 但是使用natsort,它返回[“-folder1-”,“-folder2-”,“-folder-”] 我想通过使用natsort得到相同的结果 我怎么做 a = ["-folder1-", "-folder2-", "-folder-"] import natsort sorting

我有三个文件夹,它们的名称是
[“-folder2-”,“-folder1-”,“=Folder-”]

当我使用“排序”或在窗口中时,它返回
[“-folder-”、“-folder1-”、“-folder2-”]
。 但是使用natsort,它返回
[“-folder1-”,“-folder2-”,“-folder-”]

我想通过使用natsort得到相同的结果 我怎么做

a = ["-folder1-", "-folder2-", "-folder-"]
import natsort
sorting = natsort.natsorted(a, alg = natsort.ns.PATH | natsort.ns.LOCALE | natsort.ns.IGNORECASE)
print(sorted(a)) #---> ["-folder-", "-folder1-", "-folder2-"]
print(sorting) #---> ["-folder1-", "-folder2-", "-folder-"]

在我回答你的问题之前,首先我想解释一下发生了什么
natsort
在输入中查找数字,并将其与非数字组件分离。查看这一点的最简单方法是查看自然排序键的输出。(我省略了
路径
区域设置
选项,因为它们完全破坏了输出)

导入natsort >>>ns\u key=natsort.natsort\u keygen(alg=natsort.IGNORECASE) >>>a=[“-folder1-”、“-folder2-”、“-folder-”] >>>[N_键(x)代表a中的x] [('-folder',1',-'),('-folder',2',-'),('-folder-',)] 当将
'-folder'
'-folder-'
进行比较时,根据Python的排序启发法,前者被认为是第一位的,因此带有数字的文件夹被放在第一位

为了回答您的问题,我们需要哄骗
natsort
,使其认为
'-'
后面不跟数字一样。一种方法是使用正则表达式

>>重新导入
>>>r=重新编译(r“(?”,x)以表示a中的x]
['0-folder1-'、'0-folder2-'、'0-folder0-']
>>>#natsort生成什么?
>>>ns\u key=natsort.natsort\u keygen(key=lambda x:r.sub(“0\g”,x),alg=natsort.IGNORECASE)
>>>[N_键(x)代表a中的x]
[('',0'-文件夹',1'-'),('',0'-文件夹',2'-'),('',0'-文件夹',0'-')]
>>>#它真的有效吗?
>>>natsort.natsorted(a,key=lambda x:r.sub(“0\g”,x),alg=natsort.ns.PATH | natsort.ns.LOCALE | natsort.ns.IGNORECASE)
['-folder-'、'-folder1-'、'-folder2-']
另一种方法是在
'-'
上“拆分”您的输入,这将产生类似的效果。这是
路径
在引擎盖下的功能之一,但用于文件分隔符

natsort生成什么? >>>ns_key=natsort.natsort_keygen(key=lambda x:x.split('-'),alg=natsort.IGNORECASE) >>>[N_键(x)代表a中的x] [((),('folder',1),(),((),('folder',2),(),((),('folder',,),())] >>>#它真的有效吗? >>>natsort.natsorted(a,key=lambda x:x.split('-'),alg=natsort.ns.PATH | natsort.ns.LOCALE | natsort.ns.IGNORECASE) ['-folder-'、'-folder1-'、'-folder2-']
您可能想知道为什么
PATH
不会自动处理此问题。
PATH
旨在处理由于文件分隔符或文件扩展名而出现的异常。您的示例既没有,也没有帮助。如果这里给出的示例具有代表性,我建议删除
PATH
选项因为它只会增加运行时间,而不会带来任何好处