web-dev-qa-db-fra.com

Python - Comment trouver des fichiers et ignorer des répertoires dans os.listdir

J'utilise os.listdir Et cela fonctionne bien, mais la liste contient également des sous-répertoires, ce qui n'est pas ce que je veux: je n'ai besoin que de fichiers.

Quelle fonction dois-je utiliser pour cela?

J'ai aussi regardé os.walk Et cela semble être ce que je veux, mais je ne suis pas sûr de la façon dont cela fonctionne.

38
Bartee

Vous devez filtrer les répertoires. os.listdir() liste tous les noms d'un chemin donné. Vous pouvez utiliser os.path.isdir() pour cela:

basepath = '/path/to/directory'
for fname in os.listdir(basepath):
    path = os.path.join(basepath, fname)
    if os.path.isdir(path):
        # skip directories
        continue

os.walk() fait le même travail sous le capot; à moins que vous n'ayez besoin de recurse dans les sous-répertoires, vous n'avez pas besoin d'utiliser os.walk() ici.

44
Martijn Pieters

Voici un joli petit one-liner sous la forme d'une liste de compréhension:

[f for f in os.listdir(your_directory) if os.path.isfile(os.path.join(your_directory, f))]

Ceci return un list des noms de fichiers dans le your_directory.

21
Alex Thornton
import os
directoryOfChoice = "C:\\" # Replace with a directory of choice!!!
filter(os.path.isfile, os.listdir(directoryOfChoice))

P.S: os.getcwd () renvoie le répertoire en cours.

8
SixSense
for fname in os.listdir('.'):
    if os.path.isdir(fname):
       pass  # do your stuff here for directory
    else:
       pass  # do your stuff here for regular file
4
nagylzs