如何在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
选项因为它只会增加运行时间,而不会带来任何好处