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自然排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • opencv实现文档矫正

    opencv实现文档矫正

    这篇文章主要为大家详细介绍了opencv实现文档矫正功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Python中的正则表达式与JSON数据交换格式

    Python中的正则表达式与JSON数据交换格式

    正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配快速检索文本、实现替换文本的操作。这篇文章主要介绍了Python中的正则表达式与JSON ,需要的朋友可以参考下
    2019-07-07
  • python通过pillow识别动态验证码的示例代码

    python通过pillow识别动态验证码的示例代码

    在上网时,经常会遇到验证码,本次试验将带领大家认识验证码的一些特性,并利用 Python 中的 pillow 库完成对验证码的破解。感兴趣的可以了解一下
    2021-11-11
  • Python自动化测试框架之unittest使用详解

    Python自动化测试框架之unittest使用详解

    unittest是Python自动化测试框架之一,提供了一系列测试工具和接口,支持单元测试、功能测试、集成测试等多种测试类型。unittest使用面向对象的思想实现测试用例的编写和管理,可以方便地扩展和定制测试框架,支持多种测试结果输出格式
    2023-04-04
  • PaddleOCR 识别表情包文字示例详解

    PaddleOCR 识别表情包文字示例详解

    这篇文章主要为大家介绍了PaddleOCR 识别表情包文字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 使用Python从Excel文件中自动提取图片的全过程

    使用Python从Excel文件中自动提取图片的全过程

    在日常数据处理工作中,我们常常需要面对包含大量图片的Excel文件,无论是产品目录、员工档案还是资产清单,这些图片往往承载着重要的视觉信息,所以本文将深入探讨如何使用Python与spire.xls for python库,为您提供一个详细、可操作的Excel图片提取教程
    2026-02-02
  • 在Python3中初学者应会的一些基本的提升效率的小技巧

    在Python3中初学者应会的一些基本的提升效率的小技巧

    这篇文章主要介绍了在Python3中的一些基本的小技巧,有利于刚刚上手Python的初学者提升开发效率,需要的朋友可以参考下
    2015-03-03
  • Python Locust搭建高性能负载测试工具

    Python Locust搭建高性能负载测试工具

    Locust 是一个开源的、基于 Python 的负载测试工具,它允许开发者使用 Python 代码来定义用户行为,从而模拟真实用户对系统进行压力测试,所以本文就来使用Locust搭建一个高性能负载测试工具吧
    2025-06-06
  • Python探索之静态方法和类方法的区别详解

    Python探索之静态方法和类方法的区别详解

    这篇文章主要介绍了Python探索之静态方法和类方法的区别详解,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • Python文件操作基本流程代码实例

    Python文件操作基本流程代码实例

    这篇文章主要介绍了Python文件操作基本流程代码实例,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12

最新评论