首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。
我需要处理目录中的某些文件,并且需要对文件进行数字排序。我lambda
在wiki.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
),性能,样式/可读性?
谢谢你,扎卡里
这称为“自然排序”或“人类排序”(与字典排序相反,这是默认设置)。 内德·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)
它与您正在执行的操作类似,但可能更笼统。
问题内容: 我需要对.flv文件进行数字排序,并且能够使用以下命令执行此操作: 但是有很多文件(数百个),因此无法正确排序。 但是奇怪的是,如果我在不起作用的情况下破坏了该命令。 我可以只使用ls,但文件夹中还有其他文件类型。 到目前为止我尝试过的是: 问题答案: 我会尝试以下代码。适用于我的测试场景: 所述列表上的每个线FLV文件1中,需要在每行开始对第二个字符的第一(且仅一个)字(开始数)。按
问题内容: 当我们使用命令时,文件以一种排序的方式显示其内容,如果我不想得到任何种类的输出,而是一个经过排序的文件怎么办? 问题答案: 您可以使用文件重定向来重定向排序后的输出: 或者你也可以使用,排序的选项,以指示相同的输入和输出文件: 注意: 一个常见的错误是试图将输出重定向到相同的输入文件(例如)。这不起作用,因为外壳正在进行重定向(而不是 sort(1) 程序),并且在为 sort(1)
问题内容: 我在排序包含整数的字符串时遇到问题。如果使用下面的代码,我将进行排序:1some,2some,20some,21some,3some,一些 但是我希望将其排序为:1some,2some,3some,20some,21some,一些 我怎样才能做到这一点? 谢谢! 问题答案: 这是有关如何执行此操作的独立示例(未特别优化): 输出量 说明 该示例使用一个常数来推断数字是否位于的起始位置。
我想根据数字字段对搜索结果进行排序。在下面的示例代码中,我希望基于'Age'字段进行排序。我从以下答案开始: [如何在Lucene 6中对IntPont或LongPoint字段进行排序 [在Lucene中根据数字字段对搜索结果进行排序 我在搜索函数中将sortfield.type.score更改为sortfield.type.long。但我得到: 意外的docvalues为字段“年龄”键入NONE
问题内容: 我知道这听起来微不足道,但是我没有意识到 的功能很奇怪。我有一个实际上是字符串形式的“数字”列表,因此我先将它们转换为整数,然后尝试进行排序。 给我: 我想要的是 我四处寻找与排序数字集相关的算法,但是我发现所有算法都涉及对字母数字集进行排序。 我知道这可能是个没有脑子的问题,但是google和我的教科书没有提供比该.sort()功能有用的功能。 问题答案: 您实际上尚未将字符串转换为