У меня есть каталог из 9 изображений:
image_0001, image_0002, image_0003
image_0010, image_0011
image_0011-1, image_0011-2, image_0011-3
image_9999
Я хотел бы иметь возможность эффективно перечислять их, например, так (4 записи для 9 изображений):
(image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999)
Есть ли в python способ вернуть каталог изображений кратким / понятным способом (без перечисления каждого файла)?
Итак, возможно что-то вроде этого:
перечислить все изображения, отсортировать их численно, создать список (считая каждое изображение в последовательности от начала).
Если изображение отсутствует (создайте новый список), продолжайте, пока не закончится оригинальный список файлов.
Теперь у меня должны быть несколько списков, которые содержат неразорванные последовательности.
Я пытаюсь облегчить чтение / описание списка чисел. Если бы у меня была последовательность из 1000 последовательных файлов, она могла бы быть четко указана как файл [0001-1000], а не как файл ['0001', '0002', '0003' и т. Д.]]
Редактировать1 (на основе предложения): При наличии сплюснутого списка, как бы вы получили паттерны глобуса?
Edit2 Я пытаюсь разбить проблему на более мелкие части. Вот пример части решения:
data1 работает, data2 возвращает 0010 как 64, data3 (данные реального мира) не работают:
# Find runs of consecutive numbers using groupby. The key to the solution
# is differencing with a range so that consecutive numbers all appear in
# same group.
from operator import itemgetter
from itertools import *
data1=[01,02,03,10,11,100,9999]
data2=[0001,0002,0003,0010,0011,0100,9999]
data3=['image_0001','image_0002','image_0003','image_0010','image_0011','image_0011-2','image_0011-3','image_0100','image_9999']
list1 = []
for k, g in groupby(enumerate(data1), lambda (i,x):i-x):
list1.append(map(itemgetter(1), g))
print 'data1'
print list1
list2 = []
for k, g in groupby(enumerate(data2), lambda (i,x):i-x):
list2.append(map(itemgetter(1), g))
print '\ndata2'
print list2
возвращается:
data1
[[1, 2, 3], [10, 11], [100], [9999]]
data2
[[1, 2, 3], [8, 9], [64], [9999]]