其他回答已经很好了。但是无论如何,我想发表我的带有一些解释的回答。
from os.path import basename,splitext
path_list = ['/home/username/images/s1/4.jpg', '/home/username/images/s1/7.jpg',
'/home/username/images/s1/6.jpg', '/home/username/images/s1/3.jpg',
'/home/username/images/s1/5.jpg', '/home/username/images/s1/10.jpg',
'/home/username/images/s1/9.jpg', '/home/username/images/s1/1.jpg',
'/home/username/images/s1/2.jpg', '/home/username/images/s1/12.jpg',
'/home/username/images/s1/11.jpg', '/home/username/images/s1/8.jpg']
new_list = [splitext(basename(x))[0] for x in path_list]
fin_list = list(zip(path_list,new_list))
fin_list = [x[0] for x in sorted(fin_list,key=lambda x: int(x[1]))]
print(fin_list)
1)创建一个仅包含文件名的列表。1, 2, ...
等。
new_list = [splitext(basename(x))[0] for x in path_list]
注意:为什么是[0]?因为每个splitext(basename(x))[0]
的输出结果会像这样,
('1','.jpg') , ('4','.jpg')
所以,[0] 0th
索引只给我们文件名!
2) zip 每个可迭代物品与彼此一起,并创建一个列表。因此,此列表具有以下值,
fin_list = list(zip(path_list,new_list))
#output
('/home/username/images/s1/4.jpg','4.jpg')
3) [x[0] for x in sorted(fin_list,key=lambda x: int(x[1]))]
这段代码从已排序的列表fin_list
中创建一个列表,注意key是关键。Key将是元组中的第二个项目,即4,3,7,...
等。基于此进行排序。
最终的输出结果:
['/home/username/images/s1/1.jpg', '/home/username/images/s1/2.jpg',
'/home/username/images/s1/3.jpg', '/home/username/images/s1/4.jpg',
'/home/username/images/s1/5.jpg', '/home/username/images/s1/6.jpg',
'/home/username/images/s1/7.jpg', '/home/username/images/s1/8.jpg',
'/home/username/images/s1/9.jpg', '/home/username/images/s1/10.jpg',
'/home/username/images/s1/11.jpg', '/home/username/images/s1/12.jpg']