跳转到主要内容

简单的Python自然顺序排序API

项目描述

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

natsort.natsort() 函数在 naturalsort 包中是一个非常简单的替代方案,它实现了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 排序顺序)与 自然排序 的比较示例

> # 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包功能的一小部分,具体是以下调用会产生相同的排序顺序:

    naturalsort包

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

    natsort包

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

    此示例展示了两个包的不同目标:naturalsort包旨在排序版本号,而默认情况下,natsort包将破折号解释为负号,并需要关键字参数number_type=None来禁用此行为。

  2. naturalsort包适用于Python 2.4和2.5,而natsort包至少需要Python 2.6。

联系方式

naturalsort的最新版本可在PyPIGitHub上找到。有关错误报告,请在GitHub上创建一个问题。如果您有任何问题、建议等,请随时通过peter@peterodding.com给我发电子邮件。

许可证

本软件根据MIT许可证授权。

© 2015 Peter Odding。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

naturalsort-1.5.1.tar.gz (7.4 kB 查看散列值)

上传时间 源代码

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面