Ho un elenco di 9 immagini:Come elencare una sequenza di immagini in modo efficiente? confronto sequenza numerica che in Python
image_0001, image_0002, image_0003 image_0010, image_0011 image_0011-1, image_0011-2, image_0011-3 image_9999
Vorrei essere in grado di elencarli in modo efficiente, come questo (4 voci per 9 immagini):
(image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999)
c'è un modo in python, per restituire un elenco di immagini, in modo breve/chiaro (senza elencare tutti i file)?
Quindi, forse qualcosa di simile:
lista di tutte le immagini, in ordine numerico, creare un elenco (contando ogni immagine in sequenza dall'inizio). Quando manca un'immagine (creare un nuovo elenco), continuare fino al completamento dell'elenco file originale. Ora dovrei avere solo alcune liste che contengono sequenze non spezzate.
Sto cercando di rendere più facile la lettura/descrivere un elenco di numeri. Se ho avuto una sequenza di 1000 file consecutivi Potrebbe essere chiaramente indicato come file [0.001-1.000] piuttosto che file [ '0001', '0002', '0003', ecc ...]
Edit1 (basata su suggerimento): Dato un elenco appiattito, come si deriveranno i pattern glob?
Edit2 Sto cercando di suddividere il problema in parti più piccole. Ecco un esempio di una parte della soluzione: opere data1, i rendimenti Dati2 0010 come 64, dati3 (i dati realworld) non funziona:
# 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
rendimenti:
data1
[[1, 2, 3], [10, 11], [100], [9999]]
data2
[[1, 2, 3], [8, 9], [64], [9999]]
Perché 'image_00 [10-11]' 'e non image_001 [0-1] '? – eumiro
image_00 [10-11] o image_001 [0-1], sì, suppongo che sia un carattere in meno – user178686
Cinicamente: sì, c'è un modo. Dubito (ma potrei sbagliarmi) che ci sia qualche funzione di libreria per farlo. Scrivi del codice, chiedi qualcosa di più specifico (ad esempio, come posso confrontare le stringhe per la somiglianza) dopo che hai già fatto 'os.listdir (percorso)', ecc. –