Ciao Massimo, Massimo Capanni wrote: > Buongiorno a tutti, > > ho appena realizzato una funzione che ha uno strano comportamento a > seconda di un certo input. > > La funzione e' questa: > > ======================================= > def subfolder(cartella): > sotto_cartelle = [] # ritorna una lista di cartelle > stop = 0 # livello di profondita' delle sottocartelle > for root, dirs, files in os.walk(cartella): > if stop == 1: > return sotto_cartelle > else: > for i in dirs: > sotto_cartelle.append(os.path.join(root,i)) > stop = stop + 1 > return sotto_cartelle (X) > ======================================= > > in pratica passo alla funzione una cartella e mi restituisce una lista > delle sottocartelle di primo livello nell'albero della directory. Sei sicuro che non si possa fare in maniera più semplice per avere solo il primo sotto-livello?
- Sempre con os.walk in teoria ti basta una sola riga... Considera il secondo elemento della prima tripla che ottieni (fai delle prove con print) - Oppure considera os.listdir combinato con os.path.isdir ... In entrambi i casi occhio ai path relativi VS path assoluti a seconda di quello che devi fare e dell'input che dai alla funzione. Giusto per darti un altro punto di vista ;) Lorenzo. > Ad esempio: > cartella = c: > > Sottocartelle: > c:\pippo > c:\pluto > c:\paperino > ... > > Successivamente eseguo questa porzione di codice in una parte del programma, > con il quale ricavo le sottocartelle di ogni sottocartella di primo livello: > > ======================================= > lista_cartelle = [] # lista delle > temp = [] > temp2 = [] > > temp = subfolder(cartella) # inserisco la lista delle cartelle di > primo livello > > for i in temp: > temp2 = [] > temp2 = subfolder(i) # contiene la lista delle sottocartelle > della cartella 'i' > > for j in temp2: > lista_cartelle.append(j) > ======================================= > > adesso succede che se ometto dalla funzione subfolder() la riga > segnata con (X) [return sotto_cartelle], il programma si blocca con un > errore perche' se una delle sottocartelle di primo livello e' vuota, > il ciclo "for j in temp2" si ferma con un Nonetype error. > > Tuttavia se inserisco la riga (X) di ritorno del valore il programma funziona. > Quello che non capisco e' che in ogni caso dovrei trovare una cartella > vuota e non un valore None. > > Avete idea di questo strano comportamento? > > massimo > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python