J'essaye de créer un script pour lister tous les répertoires, sous-répertoires et fichiers dans un répertoire donné.
J'ai essayé ceci:
import sys,os
root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")
for r,d,f in os.walk(path):
for file in f:
print os.path.join(root,file)
Malheureusement, cela ne fonctionne pas correctement.
J'obtiens tous les fichiers, mais pas leurs chemins complets.
Par exemple, si la structure dir serait:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Il imprimerait:
/home/patate/directory/targetdirectory/file.txt
Ce dont j'ai besoin, c'est du premier résultat. Toute aide serait grandement appréciée! Merci.
print(os.path.join(path, name))
Juste au cas où ... Récupérer tous les fichiers du répertoire et des sous-répertoires correspondant à un modèle (* .py par exemple):
la source
Voici un one-liner:
La
val for sublist in ...
boucle la plus externe aplatit la liste pour qu'elle soit unidimensionnelle. Laj
boucle recueille une liste de chaque nom de base de fichier et la joint au chemin actuel. Enfin, lai
boucle itère sur tous les répertoires et sous-répertoires.Cet exemple utilise le chemin d'accès codé
./
en dur dans l'os.walk(...)
appel, vous pouvez compléter n'importe quelle chaîne de chemin que vous souhaitez.Remarque:
os.path.expanduser
et / ouos.path.expandvars
peut être utilisé pour des chaînes de chemins comme~/
Prolonger cet exemple:
Il est facile d'ajouter des tests de nom de base de fichier et des tests de nom de répertoire.
Par exemple, tester les
*.jpg
fichiers:De plus, à l'exclusion du
.git
répertoire:la source
os.walk
plutôt une boucle de répertoire manuel, les générateurs sont excellents, allez les utiliser.Je ne pouvais pas commenter donc la réponse écrite ici. C'est la ligne la plus claire que j'ai vue:
la source
Vous pouvez jeter un œil à cet échantillon que j'ai réalisé. Il utilise la fonction os.path.walk qui est obsolète attention.Utilise une liste pour stocker tous les chemins de fichiers
la source
One-liner un peu plus simple:
la source
Puisque chaque exemple ici utilise simplement
walk
(avecjoin
), je voudrais montrer un bel exemple et une comparaison aveclistdir
:Donc, comme vous pouvez le constater par vous-même, la
listdir
version est beaucoup plus efficace. (et c'estjoin
lent)la source