简单的Python自然顺序排序API
项目描述
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 包更高级且可配置,因此根据您的用例,您可能更喜欢使用该包。以下是差异
我的naturalsort包仅实现了natsort包功能的一小部分,具体是以下调用会产生相同的排序顺序:
- naturalsort包
natsort.natsort(['1-1', '1-2'])
- natsort包
natsort.natsorted(['1-1', '1-2'], number_type=None)
此示例展示了两个包的不同目标:naturalsort包旨在排序版本号,而默认情况下,natsort包将破折号解释为负号,并需要关键字参数number_type=None来禁用此行为。
naturalsort包适用于Python 2.4和2.5,而natsort包至少需要Python 2.6。
联系方式
naturalsort的最新版本可在PyPI和GitHub上找到。有关错误报告,请在GitHub上创建一个问题。如果您有任何问题、建议等,请随时通过peter@peterodding.com给我发电子邮件。
许可证
本软件根据MIT许可证授权。
© 2015 Peter Odding。
项目详情
naturalsort-1.5.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 172b5ed6e7ba3420c08ba2ded1c52fe74878f5d769dc5d9dec2b6a53e7117356 |
|
MD5 | a7b7dcd79686ae1e5de24ec104bf7a2b |
|
BLAKE2b-256 | 0c84ce1985c8c61d2ac21a4b3a5d586ed0794b855f925ecc47adca546f0c7022 |