我如何根据 (_) 之后的最后一位数字重新排序带有 glob 的文件?

How can l re-order files with glob according to their last digits after ( _)?

我想根据文件的值重新排序我的文件。

为此,我使用 glob 文件加载它们并重新排序。

import glob as glob
import os

features_directory='./features/'
labels_directory='./labels/'

os.chdir(features_directory)
Features=glob.glob("*.npy")# len(Features)=13000

os.chdir(labels_directory)
Labels=glob.glob("*.npy") # len(Labels)=13000

然而,即使我制作sorted()

,它们也没有被排序
Features=sorted(glob.glob(("*.npy"))
Labels=sorted(glob.glob(("*.npy"))

print(Features)  

结果

['features_train_data_10.npy','features_train_data_123.npy',...,'features_train_data_13000.npy'] 

print(Labels)

结果 ['labels_train_data_98.npy','labels_train_data_45.npy',...,'labels_train_data_117.npy']

预期输出:

['features_train_data_1.npy','features_train_data_2.npy',...,'features_train_data_13000.npy'] 
['labels_train_data_1.npy','labels_train_data_2.npy',...,'labels_train_data_13000.npy']

感谢您的帮助

默认情况下,字符串按字典顺序排序。您应该为 sorted 指定一个键函数以按文件名的数字部分排序:

import re
Features=sorted(glob.glob("*.npy"), key=lambda n: int(re.findall(r'\d+', n)[0]))