我在一个目录中有以下文件:

使用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]以上列表中的值与文件名不同。对于ex,索引0和1处的值是正确的,因为在文件名中,Epoch-0和Epoch-1有相同的编号,但是Epoch-2有数字5.67,而list的索引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"]发布于 2022-05-20 14:38:16
这样做可以按照上传到问题中的图像中显示的顺序对文件进行排序:
files = os.listdir()
files.sort(key=lambda x: int(x.split("-")[3]))发布于 2022-05-20 14:39:23
您可以拆分数据并相应地将其保存为"Epoch-number“。
举个例子:
string = 'mb1-ssd-Epoch-5-Loss'
Number = string.split(sep='-')[3]
Output: 5取文件的名称。将拆分函数与分隔器一起应用,最后选择正确的索引。
发布于 2022-05-20 15:29:10
glob是一个更好的选择,只孤立你真正感兴趣的文件。
建立您的文件列表。
根据每个文件名中的第四个标记对列表进行排序,即“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]https://stackoverflow.com/questions/72320465
复制相似问题