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


Réponses:



52

Une manière:

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

Une autre façon :

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

Exemples trouvés ici .

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

Depuis que j'ai répondu à cette question il y a des années, pathlib a été ajouté à Python. Ma façon préférée de lister un répertoire implique désormais généralement la iterdirméthode sur les Pathobjets:

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

Est-ce que glob.glob listerait les fichiers cachés (je suppose que vous voulez dire les .XYZfichiers dans un contexte de système de fichiers Unix), lorsqu'il est utilisé avec glob.glob("/home/username/www/.*")?
Andy Finkenstadt

Oui, je veux dire des fichiers commençant par un point. L'exemple que vous avez donné fonctionnerait pour faire correspondre les fichiers cachés (et uniquement les fichiers cachés).
Trey Hunner

Je viens d'importer glob et utilisé glob.glob (r'c: \ users ') mais il est seulement retourné['c:\\users']
Musixauce3000

1
@ Musixauce3000: Vous aurez envie de faire glob.glob(r'c:\users\*')(glob il ne répertorie pas réellement les répertoires, mais développe les astérisques et autres qui accomplissent une tâche similaire).
Trey Hunner

38

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)

18

glob.globou os.listdirva le faire.


import globENTER glob.glob(r'c:\users')ENTER semble seulement revenir ['c:\\users']. Pourquoi donc? Je voudrais utiliser glob.glob car, comme d'autres utilisateurs l'ont souligné, il retourne censément le contenu d'un répertoire tout en ignorant les fichiers cachés. C'est important.
Musixauce3000

car il faut spécifier un wildcard avec glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

Le osmodule gère tout cela.

os.listdir(path)

Renvoie une liste contenant les noms des entrées dans le 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.


4

Dans Python 3.4+, vous pouvez utiliser le nouveau pathlibpackage:

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

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

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

3

Depuis Python 3.5, vous pouvez utiliser os.scandir.

La différence est qu'il renvoie les entrées de fichier et non les noms. Sur certains systèmes d'exploitation comme Windows, cela signifie que vous n'avez pas besoin os.path.isdir/filede savoir s'il s'agit d'un fichier ou non, et cela économise du temps CPU carstat c'est déjà fait lors de l'analyse du répertoire sous Windows:

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

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

(lisez une de mes réponses détaillées basées sur les performances ici )


2

Le code ci-dessous répertorie les répertoires et les fichiers dans le 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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.