In effetti quella che ho postato e' la prima versione del programma, abbastanza *rozza* :)
Vedo di sperimentare i tuoi suggerimenti, grazie Il 30 maggio 2011 14:16, Lorenzo Sutton <lsut...@libero.it> ha scritto: > 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 > _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python