[英]How to arrange items in ascending order in list Python
我在一個目錄中有以下文件:
使用os.listdir()
我正在讀取所有文件,然后將它們保存在列表中。 下面是代碼:
y = []
files = os.listdir()
for file in files:
if "mb" in file:
file = file.split("-")
loss = file[5]
lossNum = loss.split('.pth')
y.append(round(float(lossNum[0]), 3))
print(y)
在上面的代碼中,我正在讀取文件名,然后將其拆分,以便獲得 ex 8.199
或6.184
的編號,並將它們保存在列表中。 以下是列表的輸出:
[8.2, 6.185, 4.115, 4.425, 3.897, 3.972, 5.672, 6.112, 6.129, 5.382, 4.558, 5.476, 4.526, 4.579]
上面列表中的值與文件名不同。 例如,索引 0 和 1 處的值是正確的,因為文件名Epoch-0
和Epoch-1
具有相同的編號,但Epoch-2
的編號為5.67
,但列表的索引 2 包含4.11
,這是錯誤的。 這是因為當我們執行os.listdit()
時,它會自動列出 Epoch-0、Epoch-1,然后是 Epoch-10、Epoch-11、Epoch-12,而不是 Epoch-2、Epoch-3 等等。 我該如何糾正這個問題。 請幫忙謝謝
文件:
["mb1-ssd-Epoch-0-Loss-8.199731510297386.pth",
"mb1-ssd-Epoch-1-Loss-6.184953727553376.pth",
"mb1-ssd-Epoch-10-Loss-4.114924973091193.pth",
"mb1-ssd-Epoch-11-Loss-4.4250144663110245.pth",
"mb1-ssd-Epoch-12-Loss-3.896865705473233.pth",
"mb1-ssd-Epoch-13-Loss-3.972265353245018.pth.filepart",
"mb1-ssd-Epoch-2-Loss-5.671893659946138.pth",
"mb1-ssd-Epoch-3-Loss-6.111974941945709.pth",
"mb1-ssd-Epoch-4-Loss-6.128832694703498.pth",
"mb1-ssd-Epoch-5-Loss-5.382261596949754.pth",
"mb1-ssd-Epoch-6-Loss-4.558234235881704.pth",
"mb1-ssd-Epoch-7-Loss-5.47572956253997.pth",
"mb1-ssd-Epoch-8-Loss-4.526285114541518.pth",
"mb1-ssd-Epoch-9-Loss-4.578502741535153.pth"]
這樣做可以按照問題中上傳的圖片中顯示的順序對文件進行排序:
files = os.listdir()
files.sort(key=lambda x: int(x.split("-")[3]))
您可以拆分數據並將其相應地保存為“時代編號”。
一個例子:
string = 'mb1-ssd-Epoch-5-Loss'
Number = string.split(sep='-')[3]
Output: 5
取文件名。 使用分隔符應用拆分功能,最后選擇正確的索引。
glob 是僅隔離您真正感興趣的文件的更好選擇。
建立你的文件列表。
根據每個文件名中的第 4 個標記對列表進行排序 - 即 'Epoch' 和 'Loss' 之間的數字
在連字符上拆分文件名,取最后一個標記並忽略最后 4 個字符 (.pth) 並轉換為四舍五入的浮點數並添加到您的列表中。
from glob import glob
y = []
for file in sorted(glob('mb*.pth'), key=lambda x: int(x.split('-')[3])):
n = file.split('-')[-1][:-4]
y.append(round(float(n), 3))
print(y)
對於問題中顯示的文件列表,這將導致:
[8.2, 6.185, 5.672, 6.112, 6.129, 5.382, 4.558, 5.476, 4.526, 4.579, 4.115, 4.425, 3.897]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.