Comment obtenir une liste de tous les fichiers (et répertoires) dans un répertoire donné en Python?
572
Comment obtenir une liste de tous les fichiers (et répertoires) dans un répertoire donné en Python?
C'est un moyen de parcourir chaque fichier et répertoire dans une arborescence de répertoires:
import os
for dirname, dirnames, filenames in os.walk('.'):
# print path to all subdirectories first.
for subdirname in dirnames:
print(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
print(os.path.join(dirname, filename))
# Advanced usage:
# editing the 'dirnames' list will stop os.walk() from recursing into there.
if '.git' in dirnames:
# don't go into any .git directories.
dirnames.remove('.git')
for subdirname in dirnames: if subdirname != '.git'
Vous pouvez utiliser
Pour référence et plus de fonctions os, regardez ici:
la source
os.scandir
cependant d'utiliser à la place, car dans de nombreux cas, cela vous permet d'empêcher les appels système, ce qui donne une accélération gratuite (IPC et IO sont lents).os.path.isdir
.Voici une fonction d'aide que j'utilise assez souvent:
la source
la source
r'C:\temp'
est plus clair et préféré à"C:\\temp"
Rawstrings sont préférables aux barres obliques inverses.Si vous avez besoin de capacités globbing, il existe également un module pour cela. Par exemple:
renverra quelque chose comme:
Voir la documentation ici .
la source
Essaye ça:
la source
Pour les fichiers dans le répertoire de travail actuel sans spécifier de chemin
Python 2.7:
Python 3.x:
Merci à Stam Kaly pour ses commentaires sur python 3.x
la source
os.listdir()
liste les éléments du répertoire courant par défaut! Donc pas besoin deos.getcwd()
:)Une implémentation récursive
la source
J'ai écrit une version longue, avec toutes les options dont j'ai besoin: http://sam.nipl.net/code/python/find.py
Je suppose que ça ira ici aussi:
la source
Voici une autre option.
Il renvoie un itérateur d'objets os.DirEntry correspondant aux entrées (ainsi que les informations d'attribut de fichier) dans le répertoire donné par path.
Exemple:
L'utilisation de scandir () au lieu de listdir () peut augmenter considérablement les performances du code qui nécessite également des informations sur le type ou l'attribut de fichier , car les objets os.DirEntry exposent ces informations si le système d'exploitation les fournit lors de l'analyse d'un répertoire. Toutes les méthodes os.DirEntry peuvent effectuer un appel système, mais is_dir () et is_file () nécessitent généralement un appel système uniquement pour les liens symboliques; os.DirEntry.stat () nécessite toujours un appel système sous Unix mais n'en requiert qu'un pour les liens symboliques sous Windows.
Documents Python
la source
Bien que ce
os.listdir()
soit bien pour générer une liste de noms de fichiers et de répertoires, vous voulez souvent en faire plus une fois que vous avez ces noms - et en Python3, pathlib simplifie ces autres tâches. Jetons un coup d'œil et voyons si vous l'aimez autant que moi.Pour lister le contenu du répertoire, construisez un objet Path et récupérez l'itérateur:
Si nous voulons juste une liste de noms de choses:
Si vous voulez juste les dirs:
Si vous voulez les noms de tous les fichiers conf dans cette arborescence:
Si vous voulez une liste de fichiers conf dans l'arborescence> = 1K:
La résolution des chemins relatifs devient facile:
Naviguer avec un chemin est assez clair (bien qu'inattendu):
la source
Une belle doublure pour ne lister que les fichiers récursivement. J'ai utilisé ceci dans ma directive package_data setup.py:
Je sais que ce n'est pas la réponse à la question, mais peut être utile
la source
Pour Python 2
Pour Python 3
Pour le filtre et la carte, vous devez les envelopper avec list ()
La recommandation est maintenant de remplacer votre utilisation de la carte et du filtre par des expressions de générateurs ou des compréhensions de liste:
la source
Voici une version Pythonic d'une ligne:
Ce code répertorie le chemin d'accès complet de tous les fichiers et répertoires dans le nom de répertoire donné.
la source
Je sais que c'est une vieille question. C'est une bonne façon de voir si vous êtes sur une machine liunx.
la source
la source
FYI Ajouter un filtre d'os d'importation d'extensions ou de fichiers ext
la source
Si figuré, je jetterais cela. Un moyen simple et sale de faire des recherches génériques.
la source
Le code ci-dessous répertorie les répertoires et les fichiers dans le répertoire
la source
Celui qui a travaillé avec moi est une sorte de version modifiée de la réponse Saleh ci-dessus.
Le code est comme suit:
"dir = 'given_directory_name' filenames = [os.path.abspath (os.path.join (dir, i)) pour i dans os.listdir (dir)]"
la source