У меня есть каталог с jpg и другими файлами в нем, все jpg-файлы имеют имена файлов с номерами в них. Некоторые могут иметь дополнительные строки в имени файла.Сортировка имен файлов в каталоге в порядке возрастания
Например.
01.jpg
Или это может быть
Picture 03.jpg
В Python Мне нужен список всех JPGs в порядке возрастания. Вот фрагмент кода для этого
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 для fname в os.listdir ('.'), Если fname.endswith ('. Jpg')], key = lambda f: int (f.rsplit (os.path.extsep, 1) [0] .rsplit (None, 1) [- 1])) ' – inspectorG4dget
Это потому, что элементы' list' являются 'strings'. –
[Сортировка списка, содержащего буквенно-цифровые строки] (http://stackoverflow.com/questions/19366517/sorting-in-python-how-to-sort-a-list-containing-alphanumeric-values) – sam