web-dev-qa-db-fra.com

Comment puis-je lister le contenu d'un répertoire en Python?

Ça ne peut pas être difficile, mais j'ai un blocage mental.

154
Paul D. Waite
import os
os.listdir("path") # returns list
222
user85461

Une manière:

import os
os.listdir("/home/username/www/")

autre moyen :

glob.glob("/home/username/www/*")

Exemples trouvés ici .

Le glob.glob La méthode ci-dessus ne listera pas les fichiers cachés.

Depuis que j'ai initialement répondu à cette question il y a des années, pathlib a été ajouté à Python. Ma méthode préférée pour répertorier un répertoire implique généralement la méthode iterdir sur les objets Path:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")
46
Trey Hunner

os.walk peut être utilisé si vous avez besoin de récursivité:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)
34
Mark Tolonen

glob.glob ou os.listdir le fera.

18
Tuomas Pelkonen

Le module os gère tout cela.

os.listdir(path)

Retourne une liste contenant les noms des entrées du répertoire donné par chemin. La liste est dans un ordre arbitraire. Il n'inclut pas les entrées spéciales '.' et '..' même s'ils sont présents dans le répertoire.

Disponibilité: Unix, Windows.

13
zdav

Dans Python 3.4+, vous pouvez utiliser le nouveau package pathlib :

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir() retourne un itérateur, qui peut facilement être transformé en list:

contents = list(Path('.').iterdir())
3
jpyams

Depuis Python 3.5, vous pouvez utiliser os.scandir.

La différence est qu’il renvoie le fichier entrées pas les noms. Sur certains systèmes d’exploitation comme Windows, cela signifie que vous n’avez pas à os.path.isdir/file pour savoir s’il s’agit d’un fichier ou non, et cela économise du temps de calcul, car stat est déjà fait lors de la numérisation du répertoire dans Windows:

exemple pour lister un répertoire et imprimer des fichiers plus gros que max_value octets:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(Lire une réponse détaillée basée sur mes performances ici )

3

Le code ci-dessous répertorie les répertoires et les fichiers du répertoire. L'autre est os.walk

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
2