背景
我真的想重命名 16,494,000 個檔案,這些檔案都以站點編號(1 到 15,000)和類別編號(1 到 8)結尾。為此,我想遍歷檔案并重命名它們。問題是我無法弄清楚如何在我擁有的串列中對這些檔案路徑進行排序。
首先,我使用它來獲取 CWD 中的檔案路徑串列:
import os
import shutil
from pathlib import Path
import glob
lst = os.listdir(os.getcwd())
然后我得到一個非常隨機的串列。它通常從 10,000_1 開始。我將提供一個簡短版本的串列作為示例。
lst = ['10000_1.txt','10000_2.txt','10000_3.txt','10000_4.txt','10000_5.txt','10000_6.txt','10000_7.txt','10000_8.txt',
'1000_1.txt','1000_2.txt','1000_3.txt','1000_4.txt','1000_5.txt','1000_6.txt','1000_7.txt','1000_8.txt',
'16494_1.txt','16494_2.txt','16494_3.txt','16494_4.txt','16494_5.txt','16494_6.txt','16494_7.txt','16494_8.txt',
'100_1.txt','100_2.txt','100_3.txt','100_4.txt','100_5.txt','100_6.txt','100_7.txt','100_8.txt',
'1_1.txt','1_2.txt','1_3.txt','1_4.txt','1_5.txt','1_6.txt','1_7.txt','1_8.txt']
簡而言之,我們這里有 5 個站點,有 8 個類別編號:1_(1 到 8)、100_(1 到 8)、1000_(1 到 8)、10000_(1 到 8)和 16494_(1 到 8)。它們都是.txt。
我試過的
lst = lst.sort()
print(lst)
我不知道該怎么辦。我已經嘗試過其他的東西,但我沒有得到任何東西,或者它沒有排序任何東西。我希望它看起來像這樣:
我想要的是
lst = ['1_1.txt','1_2.txt','1_3.txt','1_4.txt','1_5.txt','1_6.txt','1_7.txt','1_8.txt',
'100_1.txt','100_2.txt','100_3.txt','100_4.txt','100_5.txt','100_6.txt','100_7.txt','100_8.txt',
'1000_1.txt','1000_2.txt','1000_3.txt','1000_4.txt','1000_5.txt','1000_6.txt','1000_7.txt','1000_8.txt',
'10000_1.txt','10000_2.txt','10000_3.txt','10000_4.txt','10000_5.txt','10000_6.txt','10000_7.txt','10000_8.txt',
'16494_1.txt','16494_2.txt','16494_3.txt','16494_4.txt','16494_5.txt','16494_6.txt','16494_7.txt','16494_8.txt']
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
您需要使用自定義鍵進行排序:
>>> sorted(lst, key=lambda x: (int(x.split("_")[0]), int(x.split("_")[1].split(".")[0])))
或者:
>>> sorted(lst, key=lambda x: tuple(map(int, x.rstrip(".txt").split("_"))))
uj5u.com熱心網友回復:
您可以簡單地使用拆分字串作為鍵:
sorted(lst, key=lambda x: x.split('_'))
輸出:
['1_1.txt', '1_2.txt', '1_3.txt', '1_4.txt', '1_5.txt', '1_6.txt', '1_7.txt', '1_8.txt', '100_1.txt', '100_2.txt', '100_3.txt', '100_4.txt', '100_5.txt', '100_6.txt', '100_7.txt', '100_8.txt', '1000_1.txt', '1000_2.txt', '1000_3.txt', '1000_4.txt', '1000_5.txt', '1000_6.txt', '1000_7.txt', '1000_8.txt', '10000_1.txt', '10000_2.txt', '10000_3.txt', '10000_4.txt', '10000_5.txt', '10000_6.txt', '10000_7.txt', '10000_8.txt', '16494_1.txt', '16494_2.txt', '16494_3.txt', '16494_4.txt', '16494_5.txt', '16494_6.txt', '16494_7.txt', '16494_8.txt']
另一種選擇是使用natsorted
from natsort import natsorted
natsorted(lst)
uj5u.com熱心網友回復:
def sort_rule(filename):
return filename.split('_')[0]
list.sort(key=sort_rule)
我認為您需要做的就是查找站點編號。具有相同站點編號的值將按類別排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471908.html
上一篇:如何在輸出視窗中顯示陣列內容?
下一篇:將4個已排序的陣列合并為一個
