Sto cercando di ottenere un elenco di tutti i file di registro (.log) nella directory, comprese tutte le sottodirectory.Come ottenere file in una directory, comprese tutte le sottodirectory
risposta
Cassa Python Recursive Directory Walker. In breve os.listdir() e os.walk() sono i tuoi amici.
Se si desidera elencare nella directory corrente, è possibile usare qualcosa come:
import os
for e in os.walk(os.getcwd()):
print e
Basta cambiare il
os.getcwd()
per altra strada per ottenere risultati lì.
Questa risposta non affronta la domanda dell'OP e non è rilevante per la maggior parte delle persone che cercano la stessa risposta. – Andrew
import os
import os.path
for dirpath, dirnames, filenames in os.walk("."):
for filename in [f for f in filenames if f.endswith(".log")]:
print os.path.join(dirpath, filename)
Se si desidera cercare in una directory diversa da "." si potrebbe passare la direcotry come sys.argv [1] e chiamare os.walk (sys.argv [1]). –
Miglioramento aggiuntivo: usa un generatore invece di una comprensione di lista: per nomefile in (f per f ...) –
Se vuoi escludere una certa directory, ad es. 'Old_logs', puoi semplicemente rimuoverla da' dirnames' e non verrà cercato: 'se" old_logs "nei nomi: dirnames.remove (" old_logs ")' – CGFoX
È inoltre possibile utilizzare il modulo glob insieme a os.walk.
import os
from glob import glob
files = []
start_dir = os.getcwd()
pattern = "*.log"
for dir,_,_ in os.walk(start_dir):
files.extend(glob(os.path.join(dir,pattern)))
Cosa fanno i trattini bassi nel ciclo for? '_' –
@nueverest 'os.walk' restituisce una tupla di 3' (dirpath, nomi di file, nomi di file) 'ad ogni iterazione, e ci interessa solo' dirpath' (assegnato a 'dir' sopra); i caratteri di sottolineatura sono usati solo come segnaposti per gli altri 2 valori che non ci interessano (ad esempio 'dirnames', e quindi' nomi di file', vengono assegnati alla variabile '_', che non useremo mai). – tavnab
ho una soluzione:
import os
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
print logfile
o
import subprocess
(out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate()
for logfile in out.split('\n')[0:-1]:
print logfile
Questi due prendono il vantaggio di find . -type f -name *.log
.
Il primo è più semplice ma non garantiti per il bianco-spazio quando aggiungere -name *.log
, ma ha funzionato bene per il semplice find ../testdata -type f
(nel mio ambiente OS X).
Il secondo utilizzando il sottoprocesso sembra più complicato, ma questo è lo spazio bianco sicuro (di nuovo, nel mio ambiente OS X).
presenta un design ispirato da Chris Bunch, nella risposta https://stackoverflow.com/a/3503909/2834102
- 1. Directory di copia iOS comprese sottodirectory
- 2. Java: come ottenere ricorsivamente tutte le sottodirectory?
- 3. come elencare tutte le sottodirectory in una directory
- 4. Ottenere un elenco di tutte le sottodirectory nella directory corrente
- 5. CMake: come ottenere il nome di tutte le sottodirectory di una directory?
- 6. Elenco dei file in una directory e in tutte le sottodirectory
- 7. Elenca i file su una dimensione specifica nella directory corrente e in tutte le sottodirectory
- 8. Elenca tutte le sottodirectory foglia in linux
- 9. Come caricare tutti i file di simboli in modo ricorsivo dal percorso dato comprese le sottodirectory?
- 10. Ottenere la versione del file e la versione di assembly dei file DLL nella directory corrente e tutte le sottodirectory
- 11. Impossibile aggiungere una directory e tutte le relative sottodirectory a percorso di caricamento in Emacs
- 12. Ottieni tutte le sottodirectory che contengono solo file
- 13. Come gzip su tutti i file in tutte le sottodirectory in bash
- 14. Elenca tutti i file e le directory in una directory + sottodirectory
- 15. .htaccess: reindirizzare tutte le richieste per una sottodirectory a meno che una directory esatto esiste
- 16. Come elencare tutte le cartelle e le loro sottodirectory/file in iPhone SDK?
- 17. Posso scorrere tutte le email di Outlook in una cartella comprese le sottocartelle?
- 18. Crea directory + sottodirectory
- 19. list.files() tutti i file nella directory e nelle sottodirectory
- 20. Comprende in modo ricorsivo tutte le sottodirectory del modello
- 21. Copia tutti i file con una certa estensione da tutte le sottodirectory
- 22. Come trovare solo i file in una determinata directory e ignorare le sottodirectory usando bash
- 23. Carica tutte le immagini da una directory
- 24. ottenere un elenco di tutte le cartelle in directory
- 25. Come recuperare un Subversion esterno senza recuperare tutte le altre directory e sottodirectory
- 26. grep in tutte le directory
- 27. Come posso ottenere py.test per riconoscere conftest.py in una sottodirectory?
- 28. Come spostare le librerie .NET in una sottodirectory?
- 29. Come modificare tutte le occorrenze di una parola in tutti i file in una directory
- 30. Eliminare tutte le cartelle e le sottodirectory che non hanno un file di certa estensione
Questo è già stato chiesto: http://stackoverflow.com/questions/837606/find-the-oldest-file-recursively-in- una-directory, così come alcune altre (cerca 'Python walk' nella casella di ricerca) –