Pythonnatsort库实现自然排序

作者:

文章目录
  • 目录
    • 一、什么是自然排序?
      • 字典序 vs 自然序
    • 二、快速入门
      • 安装
      • 基础用法
    • 三、六大核心应用场景
      • 1. 文件名排序
      • 2. 版本号排序
      • 3. 混合文本排序
      • 4. IP地址排序
      • 5. 复杂数据结构排序
      • 6. 科学数据排序
    • 四、高级技巧
      • 1. 忽略大小写
      • 2. 逆序排序
      • 3. 多字段排序

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

    假设有以下文件名列表:

    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']
    

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

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

    正确处理软件版本号:

    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']
    

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

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

    网络管理场景下的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']
    

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

    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}, ...]
    

    处理实验数据编号:

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

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

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

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

    您可能感兴趣的文章:

    • Python实现Windows风格文件夹自然排序的全攻略
    • Python 如何获取目录下的文件列表,并自然排序

    站内搜索