python的简单自然顺序排序api
naturalsort的Python项目详细描述
naturalsort包中的natsort.natsort()函数是一个非常 在python中实现natural order sorting的python的sorted()函数的简单替代方法。包裹在PyPI上,所以 开始很简单:
$ pip install naturalsort $ python > from natsort import natsort > versions = ['1.8.1-r26', '1.8.1-r30', '2.0-r2', '2.0-r7', '2.0-r11'] > natsort(['my-package-%s' % v for v in versions]) ['my-package-1.8.1-r26', 'my-package-1.8.1-r30', 'my-package-2.0-r2', 'my-package-2.0-r7', 'my-package-2.0-r11']
用法
下面是一个常规排序的例子(基于个体的ASCII顺序 字符)与natural order sorting:
> # Import the sorted() alternative. > from natsort import natsort > > # This is plain old sorting (what we DON'T want). > sorted(['1', '5', '10', '50']) ['1', '10', '5', '50'] > > # This is natural order sorting (what we DO want). > natsort(['1', '5', '10', '50']) ['1', '5', '10', '50'] > > # natsort() accepts a optional ``reverse`` argument for consistency with > the built-in sorted() function. > natsort(['1', '5', '10', '50'], reverse=True) ['50', '10', '5', '1']
自定义比较键
最初为其创建naturalsort包的主要用例是 文件名的排序,其中嵌入版本号。不幸的是 不会总是开箱即用;您可能需要定义一个自定义比较 钥匙。下面是一个需要自定义比较键来获取 正确的结果:
> from natsort import natsort > from pprint import pprint > versions = ['package-name_1_all.deb', ... 'package-name_1.5_all.deb', ... 'package-name_2_all.deb']
这是默认情况:
> pprint(natsort(versions)) ['package-name_1.5_all.deb', 'package-name_1_all.deb', 'package-name_2_all.deb']
以下是获得正确结果的方法:
> from os.path import basename, splitext > def version_from_fname(filename): ... filename, extension = splitext(basename(filename)) .. name, version, architecture = filename.split('_') ... return version ... > pprint(natsort(versions, key=version_from_fname)) ['package-name_1_all.deb', 'package-name_1.5_all.deb', 'package-name_2_all.deb']
为什么是另一个natsort模块?!
pypi上的natsort包比我的 naturalsort包,因此根据您的用例,您可能更愿意使用它 而是打包。区别如下:
我的naturalsort包只实现了功能的一小部分 在natsort包中,具体地说,以下调用会导致相同的结果 排序顺序:
- 自然排序包:
natsort.natsort(['1-1','1-2'])
- 自然排序包:
natsort.natsorted(['1-1','1-2'], number_type=None)
这个例子显示了这两个包的不同目标:naturalsort 包用于对版本号进行排序,而natsort包 default将破折号解释为负号,并需要关键字 参数number_type=None禁用此行为。
naturalsort包在python 2.4和2.5上工作,而natsort 包至少需要Python2.6。
联系人
最新版本的naturalsort可在PyPI和GitHub上找到。为了 错误报告请在GitHub上创建问题。如果你有问题, 建议等。请随时给我发邮件到peter@peterodding.com。