J'essaie d'obtenir une liste de tous les fichiers journaux (.log) dans le répertoire, y compris tous les sous-répertoires.Comment obtenir des fichiers dans un répertoire, y compris tous les sous-répertoires
Répondre
Sortie Python Recursive Directory Walker. En résumé, os.listdir() et os.walk() sont vos amis.
Si vous voulez la liste dans le répertoire courant, vous pouvez utiliser quelque chose comme:
import os
for e in os.walk(os.getcwd()):
print e
Il suffit de changer le
os.getcwd()
à un autre chemin pour obtenir des résultats là-bas.
Cette réponse ne répond pas à la question du PO et n'est pas pertinente pour la plupart des personnes qui chercheraient la même réponse. – 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)
Si vous voulez chercher dans un répertoire différent de "." vous pouvez passer le direcotry comme sys.argv [1] et appelez os.walk (sys.argv [1]). –
Amélioration supplémentaire: Utilisez un générateur au lieu de la liste de compréhension: pour le nom de fichier dans (f pour f ...) –
Si vous voulez exclure un certain répertoire, par exemple, 'old_logs', vous pouvez simplement le supprimer de 'dirnames' ne sera pas recherché: 'if" old_logs "dans dirnames: dirnames.remove (" old_logs ")' – CGFoX
Vous pouvez également utiliser le module glob avec 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)))
Que font les traits de soulignement dans la boucle for? '_' –
@nueverest 'os.walk' renvoie un tuple' (dirpath, dirnames, noms de fichiers) 'à chaque itération, et nous ne sommes intéressés que par' dirpath' (assigné 'dir' ci-dessus); Les caractères de soulignement sont simplement utilisés comme des espaces réservés pour les 2 autres valeurs qui ne nous intéressent pas (c'est-à-dire 'dirnames', puis' noms de fichiers ', sont assignés à la variable '_', que nous n'utiliserons jamais). – tavnab
J'ai une solution:
import os
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
print logfile
ou
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
Ces deux prennent l'avantage de find . -type f -name *.log
.
La première est plus simple, mais pas garanti pour l'espace blanc quand ajouter -name *.log
, mais a bien fonctionné pour simplement find ../testdata -type f
(dans mon OS X environnement).
Le second sous-processus semble plus compliqué, mais il s'agit de l'espace sécurisé (encore une fois, dans mon environnement OS X).
Ceci est inspiré par Chris Bunch, dans la réponse https://stackoverflow.com/a/3503909/2834102
- 1. Y compris les fichiers source dans C
- 2. Obtenir une liste de tous les fichiers dans un répertoire
- 3. PHP classes et y compris les fichiers
- 4. Comment déplacer tous les fichiers mp3 dans un seul répertoire?
- 5. Y compris les bibliothèques boost dans les fichiers make
- 6. Capture tous les liens, y compris la soumission de formulaire
- 7. Comment obtenir tous les fichiers dans un répertoire avec certaine extension en C#?
- 8. Y compris Javascript dans les pages Web
- 9. Supprimer tous les fichiers dans un répertoire vb6
- 10. Comment obtenir la chaîne de requête y compris les paramètres
- 11. source tous les fichiers dans un répertoire de .bash_profile
- 12. LINUX: Lien tous les fichiers d'un répertoire à un autre
- 13. Comment gérer tous les caractères ASCII (y compris les caractères spéciaux regex) dans une regex Perl?
- 14. Commande pour compresser tous les fichiers/dossiers sous un répertoire
- 15. y compris les fichiers sans avoir à spécifier $ _SERVER [ « DOCUMENT_ROOT »]
- 16. Y compris un fichier PHP, traite les URL relatives de ce répertoire
- 17. y compris les modules de contrôleur
- 18. Comment inclure tous les fichiers d'un répertoire avec cmake?
- 19. Y compris beaucoup de directives de réécriture dans lighttpd
- 20. Comment obtenir un NSarray de tous les noms de fichiers dans un répertoire sur un serveur distant?
- 21. Y compris les documents complets de LaTeX dans d'autres
- 22. Comment puis-je ajouter un préfixe à tous les noms de fichiers dans un répertoire?
- 23. Comment puis-je appliquer tous les fichiers sql dans un répertoire?
- 24. Découper les espaces principaux, y compris les onglets
- 25. Y compris dll dans l'exe?
- 26. y compris un fichier exe à jar
- 27. Trouver tous les fichiers dans un répertoire qui ne sont pas eux-mêmes des répertoires
- 28. y compris dynamiquement les scripts php
- 29. Comment pouvez-vous obtenir un enfant ComboBox d'un DataGridView pour traiter toutes les clés, y compris "."?
- 30. .net - Comment utiliser les attributs et y compris les arguments?
Cela a déjà été demandé: http://stackoverflow.com/questions/837606/find-the-oldest-file-recursively-in- a-directory, ainsi que quelques autres (recherche 'Python walk' dans la boîte de recherche) –