我有一個需要打開的檔案名串列,但是,檔案名包含一個連字符“-”,作業系統或 Windows 10 都不會自然地將其識別為負數。例如,串列本身被匯入為
['-001.000ps.csv',
'-100.000ps.csv',
'0000.000ps.csv',
'0001.000ps.csv',
'0002.000ps.csv',
'0003.000ps.csv',
'0003.500ps.csv',
]
其中 -1 先于 -100。-1 和 -100 的位置需要顛倒,我需要保留前導零和“ps.csv”組件,因為檔案是以這種方式命名的。
我嘗試了一些我在這個 stackexchange 上找到的解決方案,但是,大多數人想要處理的是搜索正數并從中排序。對于natsort 包,發生的情況是 -1 和 -100 被放在串列的底部。
將這些字串轉換為整數或浮點數失敗,我猜是因為 ps.csv 在元素內部。
我從此處參考的博客文章中復制粘貼了解決方案,并且發生了同樣的問題。我覺得我在這里遺漏了一些明顯的東西,為什么負數不起作用?
uj5u.com熱心網友回復:
natsort可用于對帶符號的數字進行排序,如下所示:
fnames = [
'-001.000ps.csv',
'-100.000ps.csv',
'0000.000ps.csv',
'0001.000ps.csv',
'0002.000ps.csv',
'0003.000ps.csv',
'0003.500ps.csv',
]
natsort.realsorted(fnames)
natsort.natsorted(fnames, alg=natsort.ns.REAL)
這兩個產生相同的輸出:
['-100.000ps.csv',
'-001.000ps.csv',
'0000.000ps.csv',
'0001.000ps.csv',
'0002.000ps.csv',
'0003.000ps.csv',
'0003.500ps.csv']
uj5u.com熱心網友回復:
您可以根據名稱的前 6 個字符對串列進行排序:
a = ['-001.000ps.csv',
'-100.000ps.csv',
'0000.000ps.csv',
'0001.000ps.csv',
'0002.000ps.csv',
'0003.000ps.csv',
'0003.500ps.csv',
]
a.sort(key=lambda x: float(x[:6]))
結果:
['-100.000ps.csv',
'-001.000ps.csv',
'0000.000ps.csv',
'0001.000ps.csv',
'0002.000ps.csv',
'0003.000ps.csv',
'0003.500ps.csv'
]
uj5u.com熱心網友回復:
嘗試:
lst = [
"-001.000ps.csv",
"-100.000ps.csv",
"0000.000ps.csv",
"0001.000ps.csv",
"0002.000ps.csv",
"0003.000ps.csv",
"0003.500ps.csv",
]
import re
pat = re.compile(r"^(-?\d \.?\d*)(.*)")
out = sorted(
lst, key=lambda x: (float((v := pat.search(x)).group(1)), v.group(2))
)
print(out)
印刷:
[
"-100.000ps.csv",
"-001.000ps.csv",
"0000.000ps.csv",
"0001.000ps.csv",
"0002.000ps.csv",
"0003.000ps.csv",
"0003.500ps.csv",
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522680.html
上一篇:如何在串列串列中查找重復項?
