【发布时间】:2016-01-14 12:50:48
【问题描述】:
我有一个目录,里面有 jpg 和其他文件,这些 jpg 都有文件名,里面有数字。有些可能在文件名中有额外的字符串。
例如。
01.jpg
也可以
Picture 03.jpg
在 Python 中,我需要按升序排列的所有 jpg 列表。 这是这个的代码sn-p
import os
import numpy as np
myimages = [] #list of image filenames
dirFiles = os.listdir('.') #list of directory files
dirFiles.sort() #good initial sort but doesnt sort numerically very well
sorted(dirFiles) #sort numerically in ascending order
for files in dirFiles: #filter out all non jpgs
if '.jpg' in files:
myimages.append(files)
print len(myimages)
print myimages
我得到的是这个
['0.jpg', '1.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg',
'15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '2.jpg', '20.jpg',
'21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '26.jpg', '27.jpg',
'28.jpg', '29.jpg', '3.jpg', '30.jpg', '31.jpg', '32.jpg', '33.jpg',
'34.jpg', '35.jpg', '36.jpg', '37.jpg', '4.jpg', '5.jpg', '6.jpg',
'7.jpg', '8.jpg', '9.jpg']
显然,它首先对最重要的数字进行盲目排序。我尝试使用sorted(),如您所见,希望它能修复它,但没有任何区别。
【问题讨论】:
-
fnames = sorted([fname for fname in os.listdir('.') if fname.endswith('.jpg')], key=lambda f: int(f.rsplit(os.path.extsep, 1)[0].rsplit(None,1)[-1])) -
这是因为
list元素是strings。 -
@inspectorG4dget,你也可以使用生成器理解。
-
@cris:没有。
sorted无论如何都会列出它