Python natsort库实现自然排序

 更新时间:2026年01月07日 10:39:57   作者:司徒轩宇  
本文介绍了Python的natsort库,该库实现了自然排序功能,能够智能识别字符串中的数字部分并按照数值大小进行排序,感兴趣的可以了解一下

在数据处理和文件管理中,我们经常遇到需要排序的字符串包含数字的情况。Python 内置的 sorted() 函数在遇到 "file2.txt""file10.txt" 时会给出违反直觉的结果,这时就需要自然排序(Natural Sorting)。本文将深入介绍 Python 的 natsort 库,带你解锁智能排序新姿势。

一、什么是自然排序?

字典序 vs 自然序

假设有以下文件名列表:

files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"]
排序方式结果
字典序(sorted()[‘file1.txt’, ‘file10.txt’, ‘file2.txt’, ‘file20.txt’]
自然序(natsorted())[‘file1.txt’, ‘file2.txt’, ‘file10.txt’, ‘file20.txt’]

自然排序的核心特点:智能识别字符串中的数字部分,按照数值大小进行排序。

二、快速入门

安装

pip install natsort

基础用法

from natsort import natsorted

files = ["image99.jpg", "image100.jpg", "image1.jpg"]
print(natsorted(files))  # ['image1.jpg', 'image99.jpg', 'image100.jpg']

三、六大核心应用场景

1. 文件名排序

处理带有序号的图像帧、日志文件等:

import os

files = os.listdir("video_frames")
sorted_files = natsorted(files)  # 自动处理 frame_1.jpg, frame_2.jpg...frame_10.jpg

2. 版本号排序

正确处理软件版本号:

versions = ["v1.2.3", "v1.10.0", "v2.0.0-beta", "v1.9.1"]
print(natsorted(versions))  # ['v1.2.3', 'v1.9.1', 'v1.10.0', 'v2.0.0-beta']

3. 混合文本排序

处理包含数字的中文/英文混合文本:

chapters = ["第5章", "第12章", "第1章"]
print(natsorted(chapters))  # ['第1章', '第5章', '第12章']

4. IP地址排序

网络管理场景下的IP地址排序:

ips = ["192.168.1.100", "192.168.1.2", "192.168.1.20"]
print(natsorted(ips))  # ['192.168.1.2', '192.168.1.20', '192.168.1.100']

5. 复杂数据结构排序

对字典列表按特定字段排序:

products = [
    {"name": "Product 2", "price": 50},
    {"name": "Product 10", "price": 30},
    {"name": "Product 1", "price": 40}
]
print(natsorted(products, key=lambda x: x["name"]))
# [{'name': 'Product 1', 'price': 40}, {'name': 'Product 2', 'price': 50}, ...]

6. 科学数据排序

处理实验数据编号:

samples = ["Sample-1M", "Sample-500K", "Sample-100K"]
print(natsorted(samples))  # ['Sample-100K', 'Sample-500K', 'Sample-1M']

四、高级技巧

1. 忽略大小写

from natsort import ns

files = ["FileA.txt", "fileC.txt", "FILEb.txt"]
print(natsorted(files, alg=ns.IGNORECASE))  # ['FileA.txt', 'FILEb.txt', 'fileC.txt']

2. 逆序排序

print(natsorted(files, reverse=True))  # ['file20.txt', 'file10.txt', 'file2.txt', 'file1.txt']

3. 多字段排序

data = ["v1-2", "v1-10", "v2-1", "v1-1"]
print(natsorted(data, key=lambda x: (x.split('-')[0], x.split('-')[1])))

到此这篇关于Python natsort库实现自然排序的文章就介绍到这了,更多相关Python natsort自然排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3.x提取中文的正则表达式示例代码

    python3.x提取中文的正则表达式示例代码

    这篇文章主要介绍了python3.x中提取中文的正则表达式的书写,需要的朋友可以参考下
    2019-07-07
  • 如何利用python生成MD5并去重

    如何利用python生成MD5并去重

    这篇文章主要给大家介绍了关于如何利用python生成MD5并去重的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python实现替换文件中指定内容的方法

    Python实现替换文件中指定内容的方法

    这篇文章主要介绍了Python实现替换文件中指定内容的方法,涉及Python文件读写、字符串替换等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • python3实现逐字输出的方法

    python3实现逐字输出的方法

    今天小编就为大家分享一篇python3实现逐字输出的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python OpenCV读取png图像转成jpg图像存储的方法

    Python OpenCV读取png图像转成jpg图像存储的方法

    今天小编就为大家分享一篇Python OpenCV读取png图像转成jpg图像存储的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python Tensor FLow简单使用方法实例详解

    Python Tensor FLow简单使用方法实例详解

    这篇文章主要介绍了Python Tensor FLow简单使用方法,结合实例形式详细分析了Tensor FLow相关概念、原理、用法与操作注意事项,需要的朋友可以参考下
    2020-01-01
  • Python学习教程之文件操作详解

    Python学习教程之文件操作详解

    这篇文章主要介绍了Python学习教程之文件操作的相关资料,通过示例代码讲解了打开/关闭文件、读写模式、指针控制、二进制处理及实际应用场景,需要的朋友可以参考下
    2025-06-06
  • 一文教你如何创建Python虚拟环境venv

    一文教你如何创建Python虚拟环境venv

    创建 Python 虚拟环境是一个很好的实践,可以帮助我们管理项目的依赖项,避免不同项目之间的冲突,下面就跟随小编一起学习一下如何创建Python虚拟环境venv吧
    2024-12-12
  • Python取读csv文件做dbscan分析

    Python取读csv文件做dbscan分析

    这篇文章主要介绍了Python取读csv文件做dbscan分析,读取csv文件中相应的列,然后进行转化,处理为本算法需要的格式,然后进行dbscan运算,下面文章的具体介绍需要的小伙伴可以参考一下
    2022-04-04
  • scikit-learn线性回归,多元回归,多项式回归的实现

    scikit-learn线性回归,多元回归,多项式回归的实现

    这篇文章主要介绍了scikit-learn线性回归,多元回归,多项式回归的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论