一尘不染

如何对文件进行数字排序?

python

首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。

我需要处理目录中的某些文件,并且需要对文件进行数字排序。我lambdawiki.python.org上找到了一些有关排序的示例(尤其是使用模式),并将它们放在一起:

#!env/python
import re

tiffFiles = """ayurveda_1.tif
ayurveda_11.tif
ayurveda_13.tif
ayurveda_2.tif
ayurveda_20.tif
ayurveda_22.tif""".split('\n')

numPattern = re.compile('_(\d{1,2})\.', re.IGNORECASE)

tiffFiles.sort(cmp, key=lambda tFile:
                   int(numPattern.search(tFile).group(1)))

print tiffFiles

我对Python还是很陌生,想问一下社区是否可以对此进行任何改进:缩短代码(删除lambda),性能,样式/可读性?

谢谢你,扎卡里


阅读 436

收藏
2020-12-20

共1个答案

一尘不染

这称为“自然排序”或“人类排序”(与字典排序相反,这是默认设置)。 内德·B(Ned
B)写了一个快速的版本。

import re

def tryint(s):
    try:
        return int(s)
    except:
        return s

def alphanum_key(s):
    """ Turn a string into a list of string and number chunks.
        "z23a" -> ["z", 23, "a"]
    """
    return [ tryint(c) for c in re.split('([0-9]+)', s) ]

def sort_nicely(l):
    """ Sort the given list in the way that humans expect.
    """
    l.sort(key=alphanum_key)

它与您正在执行的操作类似,但可能更笼统。

2020-12-20