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

188

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

Paul D. Waite
la source

Réponses:

262
import os
os.listdir("path") # returns list
user85461
la source
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")
Trey Hunner
la source
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)
Mark Tolonen
la source
18

glob.globou os.listdirva le faire.

Tuomas Pelkonen
la source
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.

zdav
la source
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())
jpyams
la source
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 )

Jean-François Fabre
la source
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)
Heenashree Khandelwal
la source