Re: [Python] chiarimento valore ritornato da una funzione

2011-05-31 Per discussione Massimo Capanni
grazie dei suggerimenti.

a presto

massimo

Il 30 maggio 2011 15:48, Daniele Zambelli daniele.zambe...@gmail.com
ha scritto:
 Il giorno 30 maggio 2011 12:29, Massimo Capanni massimo.capa...@gmail.com
 ha scritto:

 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?

 Perché una funzione che non restituisce nulla esplicitamente restituisce
 None.

 --

 Daniele

 www.fugamatematica.blogspot.com

     giusto!
     nel verso
     forse è perché non guardiamo le cose
     Quando non ci capiamo,


 ___
 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] chiarimento valore ritornato da una funzione

2011-05-30 Per discussione Massimo Capanni
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.
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


Re: [Python] chiarimento valore ritornato da una funzione

2011-05-30 Per discussione Massimo Capanni
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


Re: [Python] chiarimento valore ritornato da una funzione

2011-05-30 Per discussione Simone Federici
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