使用
sorted()
返回已排序对象的副本。你只是把整理好的副本退回,什么也不做。你需要
.sort()
来修改字符串。
您还需要创建一个键函数来指定您是按末尾的数字排序,而不是按字母数字排序。
import re
def order(x):
try:
# This searches and returns the first number found in the folder name
return int(re.search("\d+", x).group(0))
except (ValueError, TypeError, AttributeError):
return 0
list1.sort(key=order)
output ['New folder', 'New folder 1', 'New folder 2', 'New folder 10']
编辑:
为了解释信件:
list1 = ["Abc 1", "Abc 10", "Abc", "Test", "Test 20", "New folder",
"New folder 1", "New folder 10", "New folder 2"]
def order(x):
try:
return x + re.search("\d+", x).group(0)
except (ValueError, TypeError, AttributeError):
return x
list1.sort(key=list)
output ['Abc', 'Abc 1', 'Abc 10', 'New folder', 'New folder 1', 'New folder 10', 'New folder 2', 'Test', 'Test 20']
还有你的另一个问题。在拥有所有文件夹名称后进行排序,而不是在添加它们时进行排序。