web-dev-qa-db-fra.com

Comment compter le nombre de fichiers d'un répertoire à l'aide de Python

Je dois compter le nombre de fichiers d'un répertoire à l'aide de Python . Je suppose que le moyen le plus simple est len(glob.glob('*')), mais cela compte également le répertoire comme un fichier.

Est-il possible de ne compter que les fichiers d'un répertoire?

141
prosseek

os.listdir() sera légèrement plus efficace que d'utiliser glob.glob. Pour vérifier 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))])
192
Daniel Stutzbach
import os

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

Pour tous les types de fichiers, les sous-répertoires inclus:

import os

list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files

Seulement les fichiers (en évitant les sous-répertoires):

import os

onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
31
Guillermo Pereira

C’est là que fnmatch est très pratique:

import fnmatch

print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))

Plus de détails: http://docs.python.org/2/library/fnmatch.html

27
ngeek
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
11
ninjrok
import os
print len(os.listdir(os.getcwd()))
9
rash

Ceci 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))])

ceci 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)))
7
joaquin

Je suis surpris que personne n'ait mentionné os.scandir

def count_files(dir):
    return len([1 for x in list(os.scandir(dir)) if x.is_file()])
5
qed

Si vous souhaitez compter tous les fichiers du répertoire, y compris les fichiers des sous-répertoires, utilisez la méthode Pythonic la plus courante:

import os

file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)

Nous utilisons une somme plus rapide que l'ajout explicite du nombre de fichiers (délais en attente)

5
Mr_and_Mrs_D
def count_em(valid_path):
   x = 0
   for root, dirs, files in os.walk(valid_path):
       for f in files:
            x = x+1
print "There are", x, "files in this directory."
return x

Tiré de ce post

4
Kristian Damian
import os

def count_files(in_directory):
    joiner= (in_directory + os.path.sep).__add__
    return sum(
        os.path.isfile(filename)
        for filename
        in map(joiner, os.listdir(in_directory))
    )

>>> count_files("/usr/lib")
1797
>>> len(os.listdir("/usr/lib"))
2049
4
tzot

Voici une simple commande d'une ligne que j'ai trouvée utile:

print int(os.popen("ls | wc -l").read())
3
Bojan Tunguz

Le code de Luke est reformaté.

import os

print len(os.walk('/usr/lib').next()[2])
3
okobaka

Si vous utilisez le shell standard du système d'exploitation, vous pouvez obtenir le résultat beaucoup plus rapidement que d'utiliser la méthode Pythonic pure.

Exemple pour Windows:

import os
import subprocess

def get_num_files(path):
    cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path
    return int(subprocess.check_output(cmd, Shell=True))
1
styler
import os

total_con=os.listdir('<directory path>')

files=[]

for f_n in total_con:
   if os.path.isfile(f_n):
     files.append(f_n)


print len(files)
1
Mohit Dabas

J'ai trouvé une autre réponse qui peut être correcte comme réponse acceptée.

for root, dirs, files in os.walk(input_path):    
for name in files:
    if os.path.splitext(name)[1] == '.TXT' or os.path.splitext(name)[1] == '.txt':
        datafiles.append(os.path.join(root,name)) 


print len(files) 
1
Ismail

C'est simple:

print(len([iq for iq in os.scandir('PATH')]))

il compte simplement le nombre de fichiers dans le répertoire, j’ai utilisé la technique de compréhension de liste pour parcourir un répertoire spécifique renvoyant tous les fichiers en retour. "len (liste retournée)" renvoie le nombre de fichiers.

0
Agha Saad

je l'ai fait et cela a renvoyé le nombre de fichiers dans le dossier (Attack_Data) ... cela fonctionne bien.

import os
def fcount(path):
    #Counts the number of files in a directory
    count = 0
    for f in os.listdir(path):
        if os.path.isfile(os.path.join(path, f)):
            count += 1

    return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder
print (fcount(path))
0
Sam Ekoro

Bien que je sois d’accord avec la réponse fournie par @DanielStutzbach: os.listdir() sera légèrement plus efficace que d’utiliser glob.glob.

Toutefois, précision supplémentaire, si vous souhaitez compter le nombre de fichiers spécifiques dans un dossier, vous souhaitez utiliser len(glob.glob()). Par exemple, si vous comptiez tous les fichiers PDF dans un dossier que vous souhaitez utiliser:

pdfCounter = len(glob.glob1(myPath,"*.pdf"))
0
LBes