PDA

Visualizza la versione completa : [PYTHON] Scansione ricorsiva delle cartelle


newlife05
26-10-2009, 19:31
come posso scansionare con python una cartella e tutte le sue sottocartelle finchè non finiscono o sono vuote? ho provato un pò ma arrivo ad una scansione limitata, massimo una sottocartella.

billiejoex
02-11-2009, 22:07
os.walk() e os.path.walk() sono fatte apposta

newlife05
03-11-2009, 21:35
le avevo provate (anche se dalla doc non pensavo facessero questo. forse non so leggere la doc), ma non mi funzionano. sbaglio sicuramente io ad usarle.

newlife05
06-11-2009, 19:19
niente da fare, ottengo un errore perchè mi restituiscono liste. io invece devo, dopo prendo la directory con get.cwd, e guardare se ci sono file, aprirli, e poi passare alle sottocartelle e cosi via. mi fai vedere come posso fare? io ho trovato un codice in rete, un for a tre variabili che itera sull'os.walk. io prendo la variabile dir che è una lista, itero su di lei, poi dentro itero sulla lista dei files e li unisco con join, ma ottengo una lista e quindi un errore.
come posso fare?

newlife05
06-11-2009, 19:50
mi interesserebbe anche come eliminare i terminatori di linea in un file. mi falsa il risultato cosi. ho provato con alcuni if, ma non li elimina tutti

billiejoex
06-11-2009, 19:58
Originariamente inviato da newlife05
niente da fare, ottengo un errore perchè mi restituiscono liste. io invece devo, dopo prendo la directory con get.cwd, e guardare se ci sono file, aprirli, e poi passare alle sottocartelle e cosi via. mi fai vedere come posso fare? io ho trovato un codice in rete, un for a tre variabili che itera sull'os.walk. io prendo la variabile dir che è una lista, itero su di lei, poi dentro itero sulla lista dei files e li unisco con join, ma ottengo una lista e quindi un errore.
come posso fare?

Prova a far vedere il codice.
Difficile capire cosi'.

[quote]mi interesserebbe anche come eliminare i terminatori di linea in un file. mi falsa il risultato cosi. ho provato con alcuni if, ma non li elimina tutti[quote]

Se cicli in questo modo:



for line in open('file.ext', 'r'):
...


...le linee che ottieni sono senza terminatore ('\n' o '\r\n').
Alternativamente puoi fare line.strip().

newlife05
06-11-2009, 22:54
grazie per la risposta.
allora, il codice è sulla penna che ho di là. è il codice d'esempio preso dalla documentazione, quello

for root, dirs, files in os.walk(path)

poi io ho printato le variabili e visto che sono liste. siccome devo controllare tutti i file dentro tutte le cartelle e sotto cartelle avevo pensato di usare os.path.join(dirs, files) ma non lo fa perchè sono liste. cosi ho provato a ciclare esternamente le dirs e internamente i files facendo ad ogni ciclo un join(dirs, file) ma niente da fare.

riguardo al file questa cosa non la sapevo, come mai ottengo linee senza terminatore in quel modo? dove le hai lette ste cose?

billiejoex
16-11-2009, 20:25
for root, dirs, files in os.walk(path)

poi io ho printato le variabili e visto che sono liste. siccome devo controllare tutti i file dentro tutte le cartelle e sotto cartelle avevo pensato di usare os.path.join(dirs, files) ma non lo fa perchè sono liste

Essendo liste dovrei annidare un ulteriore ciclo for in cui cicli sui singoli elementi al loro interno.


riguardo al file questa cosa non la sapevo, come mai ottengo linee senza terminatore in quel modo? dove le hai lette ste cose?

Beh, perchè è cosi e basta direi. =)
L'oggetto tornato da open() può essere utilizzato con il for, che cicla le sue linee.

newlife05
17-11-2009, 15:26
è cosi e basta? mi aspettavo una risposta motivata, tipo che è documentata da qualche parte sta cosa. grazie lo stesso comunque.

Loading