python的简单自然顺序排序api

naturalsort的Python项目详细描述


https://travis-ci.org/xolox/python-naturalsort.svg?branch=masterhttps://coveralls.io/repos/xolox/python-naturalsort/badge.png?branch=master

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包,因此根据您的用例,您可能更愿意使用它 而是打包。区别如下:

  1. 我的naturalsort包只实现了功能的一小部分 在natsort包中,具体地说,以下调用会导致相同的结果 排序顺序:

    自然排序包:

    natsort.natsort(['1-1','1-2'])

    自然排序包:

    natsort.natsorted(['1-1','1-2'], number_type=None)

    这个例子显示了这两个包的不同目标:naturalsort 包用于对版本号进行排序,而natsort包 default将破折号解释为负号,并需要关键字 参数number_type=None禁用此行为。

  2. naturalsort包在python 2.4和2.5上工作,而natsort 包至少需要Python2.6。

联系人

最新版本的naturalsort可在PyPIGitHub上找到。为了 错误报告请在GitHub上创建问题。如果你有问题, 建议等。请随时给我发邮件到peter@peterodding.com

许可证

此软件是根据MIT license授权的。

版权所有2015彼得·奥丁。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何反射地迭代数组字段?   java NamedQuery错误“具有给定标识符的多行:1”   java无法使用单独类中的计时器更新TextView   兼容性什么时候可以很快使用新的Java功能?   java二叉树路径和   java矩形的性能   java我想从同一个子表在主表中添加两个外键   java如何获取基于特定日期的所有数据?   java javafx、OO编程规则和写入变量类型的选择   java使用带枚举的switch语句   java异步任务生成运行时异常   java为什么JLabel不显示下划线字符?   java如何解析具有可变参数号的函数?   带有按钮的java JavaFX自定义列表单元格:未调用处理程序   java Modelmapper无法映射整个模型?   传递给持久化的java分离实体,包含LatLng列表