J'ai besoin de compter le nombre de fichiers dans un répertoire en utilisant Python.
Je suppose que le moyen le plus simple est len(glob.glob('*'))
, mais cela compte également le répertoire lui-même comme un fichier.
Existe-t-il un moyen de ne compter que les fichiers d'un répertoire?
Réponses:
os.listdir()
sera légèrement plus efficace que l'utilisationglob.glob
. Pour tester si un nom de fichier est un fichier ordinaire (et non un répertoire ou une autre entité), utilisezos.path.isfile()
:la source
folder_path
intérieuros.path.filename(name)
si vous n'êtes pas sur le cwd. stackoverflow.com/questions/17893542/…os.path.join(DIR, name)
OverDIR + '/' + name
? Cette dernière est plus courte et, à mon avis, plus claire que la première. Existe-t-il peut-être des OS sur lesquels ces derniers échoueraient?la source
Pour tous les types de fichiers, les sous-répertoires comprenaient:
Seuls les fichiers (en évitant les sous-répertoires):
la source
C'est là que fnmatch est très pratique:
Plus de détails: http://docs.python.org/2/library/fnmatch.html
la source
os.path.isfile()
comme la réponse acceptée. Aussi nettement plus rapide queglob.glob()
.Si vous voulez compter tous les fichiers du répertoire - y compris les fichiers des sous-répertoires, la manière la plus pythonique est:
Nous utilisons une somme plus rapide que l'ajout explicite du nombre de fichiers (délais en attente)
la source
_
enfor
boucle.os.walk
aussi je sais. Maissum
je ne sais pas ce qui se passe avec les traits de soulignement à l'intérieur de la fonction, pourriez-vous développer. Merci!la source
la source
Je suis surpris que personne n'ait mentionné
os.scandir
:la source
Cela utilise
os.listdir
et fonctionne pour n'importe quel répertoire:cela peut être simplifié avec un générateur et rendu un peu plus rapide avec:
la source
Extrait de ce post
la source
files
est une liste. 2. OP ne recherche pas de décompte récursifla source
Reformatage du code de Luke.
la source
Voici une simple commande d'une ligne que j'ai trouvée utile:
la source
ls
est généralement mal vue (elle peut souvent causer des problèmes), bien que ce ne soit pas une mauvaise méthode "rapide et sale" au niveau du shell. Vous devez utiliserls -1
, cependant, il garantit donc une ligne par fichier.Bien que je sois d'accord avec la réponse fournie par @DanielStutzbach:
os.listdir()
sera légèrement plus efficace que l'utilisationglob.glob
.Cependant, une précision supplémentaire, si vous souhaitez compter le nombre de fichiers spécifiques dans le dossier, vous souhaitez utiliser
len(glob.glob())
. Par exemple, si vous deviez compter tous les fichiers PDF dans un dossier que vous souhaitez utiliser:la source
C'est simple:
il compte simplement le nombre de fichiers dans le répertoire, j'ai utilisé la technique de compréhension de la liste pour parcourir le répertoire spécifique renvoyant tous les fichiers en retour. "len (liste retournée)" renvoie le nombre de fichiers.
la source
la source
Si vous utilisez le shell standard du système d'exploitation, vous pouvez obtenir le résultat beaucoup plus rapidement plutôt que d'utiliser une méthode pythonique pure.
Exemple pour Windows:
la source
J'ai trouvé une autre réponse qui peut être correcte comme réponse acceptée.
la source
J'ai utilisé
glob.iglob
pour une structure de répertoires similaire àLes deux options suivantes renvoient 4 (comme prévu, c'est-à-dire ne compte pas les sous-dossiers eux-mêmes )
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
la source
je l'ai fait et cela a renvoyé le nombre de fichiers dans le dossier (Attack_Data) ... cela fonctionne bien.
la source