get_dirs = lambda x : [d for d in os.listdir(x) if os.path.isdir(d)] get_dirs(".")
2011/5/30 Massimo Capanni <massimo.capa...@gmail.com> > 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 >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python