Mam katalogu 9 obrazów:Jak skutecznie wyświetlić listę sekwencji obrazów? Numercial porównanie sekwencji w Pythonie
image_0001, image_0002, image_0003 image_0010, image_0011 image_0011-1, image_0011-2, image_0011-3 image_9999
chciałbym móc wymienić je w sposób efektywny, tak (4 wpisy dla 9 obrazów):
(image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999)
Czy istnieje sposób w Pythonie, aby zwrócić katalog obrazów, w krótki/wyraźny sposób (bez listy każdego pliku)?
Więc może coś takiego:
lista wszystkich zdjęć, sortowanie numerycznie, utworzyć listę (licząc każdy obraz w sekwencji od początku). Gdy brakuje obrazu (utwórz nową listę), kontynuuj do momentu zakończenia tworzenia oryginalnej listy plików. Teraz powinienem mieć kilka list, które zawierają niezepsute sekwencje.
Próbuję ułatwić odczytanie/opisanie listy numerów. Gdybym miał sekwencję 1000 kolejnych plików Może to być wyraźnie wymienione jako plik [0001-1000] zamiast pliku ['0001', '0002', '0003' itd. ...]
Edit1 (oparty na sugestie): Biorąc pod uwagę spłaszczoną listę, jak wyprowadzilibyście wzorce globu?
Edit2 Próbuję zepsuć problem na mniejsze kawałki. Oto przykład część rozwiązania: prac dane1 powraca dane2 0010 jako 64, danych3 (dane RealWorld) nie działa:
# 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
powroty:
data1
[[1, 2, 3], [10, 11], [100], [9999]]
data2
[[1, 2, 3], [8, 9], [64], [9999]]
Dlaczego 'image_00 [10-11]' a nie 'image_001 [0-1] '? – eumiro
image_00 [10-11] lub image_001 [0-1], tak myślę, że to jeden mniej znaków – user178686
ironię: tak, istnieje sposób. Wątpię (ale mogę się mylić), że istnieje jakaś funkcja biblioteczna, aby to zrobić. Napisz jakiś kod, zapytaj czegoś bardziej konkretnego (np. Jak mogę porównać łańcuchy podobieństwa) po tym, jak już zrobiłeś 'os.listdir (ścieżka)', itd. –