Sto provando a scrivere un gestore che agisce su file all'interno di varie sottodirectory, ma mentre il mio script può vedere questi file, non può fare nulla con loro perché non riesce a assemblare i loro percorsi.Uso corretto di os.path e os.join
La parte problematica viene da questo ciclo:
for (path, dirs, files) in os.walk("data/"):
for image in files:
#do something to the image
Ora, lo script funziona nel primo livello della directory data
, ma non riesce a lavorare sulla sottodirectory data
s'.
Ho provato ad utilizzare os.path.join()
:
for (path, dirs, files) in os.walk("data/"):
print os.path.join(path, dirs)
Ma che getta il seguente:
Traceback (most recent call last):
File "bench.py", line 26, in <module>
print os.path.join(path, dirs)
File "/usr/lib/python2.7/posixpath.py", line 75, in join
if b.startswith('/'):
AttributeError: 'list' object has no attribute 'startswith'
In breve, quello che mi piacerebbe fare è assemblare un percorso dal data
all'immagine che comprende data
sottodirectory. Qual è la migliore pratica per farlo?
Quando si ottiene un'eccezione di questo tipo, è spesso perché si sta tentando di fare qualcosa su un elenco di valori come 'dirs', anziché su ogni valore. (Se non ti rendi conto che 'dirs' è una lista, l'eccezione dovrebbe sollevare questa possibilità come una bandiera rossa, e puoi provare' print dirs' o 'print type (dirs)' per scoprirlo.) Puoi risolvere questo usando un ciclo 'for', una list comprehension,' map', ecc., come mostra la risposta di mgilson, una volta riconosciuto che è ciò che stai cercando di fare. – abarnert