首页 > 解决方案 > 我如何根据 (_) 之后的最后一位数字对带有 glob 的文件重新排序?

问题描述

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

为此,我使用 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']

谢谢您的帮助

标签: python-2.7fileglob

解决方案


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

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

推荐阅读