Il 30/05/2011 14:28, Massimo Capanni ha scritto: > 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
Di recente ho avuto la tua stessa esigenza. Visto che si accettano suggerimenti, ecco la mia soluzione per ottenere la lista delle sotto cartelle di primo livello. def subfolders(path): l = [i for i in os.listdir(path) if os.path.isdir(i)] return l Saluti LMM _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python