我的程序读入从文件名中解析出的数字。我希望它按原样准确排序,但在此示例中,列为 500、4000、7000。我的命名约定应如何实现这一点?也就是说,当我有递增的数字时,它会按从小到大的顺序列出。
我真正想要的是按等级排序(此处从零开始),然后按递增数字排序...500、5000、7000。
期望的输出
LOG-rank-0-die-10-delay-500.txt
LOG-rank-0-die-10-delay-4000.txt
LOG-rank-0-die-10-delay-7000.txt
LOG-rank-1-die-10-delay-500.txt
LOG-rank-1-die-10-delay-4000.txt
LOG-rank-1-die-10-delay-7000.txt
LOG-rank-2-die-10-delay-500.txt
LOG-rank-2-die-10-delay-4000.txt
LOG-rank-2-die-10-delay-7000.txt
相关代码
for filenamelogs in sorted(os.listdir(log_directory)):
for each_line in filenamelogs:
#various file parsing activity
我正在将数据逐个文件附加到各种数组。不幸的是,如果我不能按照请求的顺序对文件读取进行排序,这对我来说很糟糕。也许我的问题转向了开发一种自定义方法以在我提供的排序约束下读取文件。
最佳答案
来自 blog 中链接的博客的评论:
>>> import re
>>> def sort_nicely(l):
... """
... Sort the given list in the way that humans expect. Modifies the original list.
... """
... convert = lambda text: int(text) if text.isdigit() else text
... alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
... l.sort(key=alphanum_key)
...
>>> mylist = ['LOG-rank-0-die-10-delay-500.txt',
... 'LOG-rank-0-die-10-delay-4000.txt',
... 'LOG-rank-0-die-10-delay-7000.txt',
... 'LOG-rank-1-die-10-delay-500.txt',
... 'LOG-rank-1-die-10-delay-4000.txt',
... 'LOG-rank-1-die-10-delay-7000.txt',
... 'LOG-rank-2-die-10-delay-500.txt',
... 'LOG-rank-2-die-10-delay-4000.txt',
... 'LOG-rank-2-die-10-delay-7000.txt']
>>> sort_nicely(mylist)
>>> print(*mylist, sep='\n')
LOG-rank-0-die-10-delay-500.txt
LOG-rank-0-die-10-delay-4000.txt
LOG-rank-0-die-10-delay-7000.txt
LOG-rank-1-die-10-delay-500.txt
LOG-rank-1-die-10-delay-4000.txt
LOG-rank-1-die-10-delay-7000.txt
LOG-rank-2-die-10-delay-500.txt
LOG-rank-2-die-10-delay-4000.txt
LOG-rank-2-die-10-delay-7000.txt
要返回
一个新的、排序的列表
而不是修改原来的列表:
>>> def sort_nicely(l):
... """
... Sort the given list in the way that humans expect. Returns a new list.
... """
... convert = lambda text: int(text) if text.isdigit() else text
... alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
... return sorted(l, key=alphanum_key)
...
>>> newlist = sort_nicely(mylist)
>>> print(*newlist, sep='\n')
关于python - 如何按数字对 linux 中的文件进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280210/