290 votes

Comment compter le nombre de fichiers dans un répertoire en utilisant Python ?

Je dois 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 aussi le répertoire lui-même comme un fichier.

Existe-t-il un moyen de ne compter que les fichiers dans un répertoire ?

0 votes

Pour ne pas tenir compte des répertoires, vous pouvez utiliser '*.fileextension' pour toute extension de fichier que vous recherchez.

345voto

Daniel Stutzbach Points 20026

os.listdir() sera légèrement plus efficace que l'utilisation de glob.glob . Pour tester si un nom de fichier est un fichier ordinaire (et non un répertoire ou une autre entité), utilisez os.path.isfile() :

import os, os.path

# simple version for working with CWD
print len([name for name in os.listdir('.') if os.path.isfile(name)])

# path joining version for other paths
DIR = '/tmp'
print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])

15 votes

N'oubliez pas d'ajouter le folder_path à l'intérieur de os.path.filename(name) si vous n'êtes pas sur le cwd. stackoverflow.com/questions/17893542/

1 votes

Cela ne compte pas les fichiers à l'intérieur des dossiers imbriqués.

6 votes

Pour compter récursivement les fichiers imbriqués dans des répertoires, il est préférable d'utiliser la solution os.walk().

132voto

Luke Points 141
import os

path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)

5 votes

Ce n'est pas récursif

2 votes

Le PO n'a pas demandé à ce que ce soit récursif.

13voto

rash Points 271
import os
print len(os.listdir(os.getcwd()))

2 votes

Cela peut être utile parfois mais cela inclut aussi les sous-répertoires dans le compte.

11voto

nrao91 Points 61
def directory(path,extension):
  list_dir = []
  list_dir = os.listdir(path)
  count = 0
  for file in list_dir:
    if file.endswith(extension): # eg: '.txt'
      count += 1
  return count

8voto

joaquin Points 22450

Cela utilise os.listdir et fonctionne pour n'importe quel répertoire :

import os
directory = 'mydirpath'

number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])

cela peut être simplifié avec un générateur et rendu un peu plus rapide avec :

import os
isfile = os.path.isfile
join = os.path.join

directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X