[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


[Python] ftplib e logging

2011-05-30 Per discussione CWSSupport - Antonio Romito


  
  
Ciao a tutti,
mi sono avventurato nella libreria logging, e mi chiedevo se
fosse possibile ( ho provato in tutti i modi ) utilizzare la
libreria logging per loggare l'output di debug ottenuto da
"ftp.set_debuglevel(2)".

Qualcuno ha avuto modo di avventurarsi nello stesso problema ?

Grazie,
Antonio
  

___
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


Re: [Python] [postgresql-it] psycopg, cursori e connessioni: tenere occupato un id

2011-05-30 Per discussione Marco Fochesato

 Per avere un errore devi usare LOCK ... NOWAIT (per il lock su una
 tabella) o SELECT ... FOR UPDATE NOWAIT (per il lock sui record). Senza il
 NOWAIT l'effetto è quello di aspettare finché il lock non viene rilasciato.
 
 
Si infatti, ho risolto così.
Ed era pure scritto nella documentazione.
Marco


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python