Python natsort庫實現(xiàn)自然排序
在數(shù)據(jù)處理和文件管理中,我們經(jīng)常遇到需要排序的字符串包含數(shù)字的情況。Python 內(nèi)置的 sorted() 函數(shù)在遇到 "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’] |
自然排序的核心特點:智能識別字符串中的數(shù)字部分,按照數(shù)值大小進行排序。
二、快速入門
安裝
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. 混合文本排序
處理包含數(shù)字的中文/英文混合文本:
chapters = ["第5章", "第12章", "第1章"] print(natsorted(chapters)) # ['第1章', '第5章', '第12章']
4. IP地址排序
網(wǎng)絡管理場景下的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. 復雜數(shù)據(jù)結構排序
對字典列表按特定字段排序:
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. 科學數(shù)據(jù)排序
處理實驗數(shù)據(jù)編號:
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庫實現(xiàn)自然排序的文章就介紹到這了,更多相關Python natsort自然排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中的正則表達式與JSON數(shù)據(jù)交換格式
正則表達式 是一個特殊的字符序列,一個字符串是否與我們所設定的這樣的字符序列,相匹配快速檢索文本、實現(xiàn)替換文本的操作。這篇文章主要介紹了Python中的正則表達式與JSON ,需要的朋友可以參考下2019-07-07
python通過pillow識別動態(tài)驗證碼的示例代碼
在上網(wǎng)時,經(jīng)常會遇到驗證碼,本次試驗將帶領大家認識驗證碼的一些特性,并利用 Python 中的 pillow 庫完成對驗證碼的破解。感興趣的可以了解一下2021-11-11
Python探索之靜態(tài)方法和類方法的區(qū)別詳解
這篇文章主要介紹了Python探索之靜態(tài)方法和類方法的區(qū)別詳解,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10

