ver una ruta nombre manejo lista leer explorador escribir directorio con carpetas carpeta archivos archivo actual abrir python count glob

una - Cómo contar la cantidad de archivos en un directorio usando Python



python lista carpetas (18)

Necesito contar la cantidad de archivos en un directorio usando Python. Supongo que la forma más fácil es len(glob.glob(''*'')) , pero eso también cuenta el directorio como un archivo.

¿Hay alguna manera de contar solo los archivos en un directorio?



Aquí hay un comando simple de una línea que encontré útil:

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


El código de Luke formateado.

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


Encontré otra respuesta que puede ser correcta como respuesta aceptada.

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)


Esto usa os.listdir y funciona para cualquier directorio:

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

esto se puede simplificar con un generador y hacer un poco más rápido con:

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


Hice esto y esto devolvió la cantidad de archivos en la carpeta (Attack_Data) ... esto funciona 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))


Me sorprende que nadie haya mencionado os.scandir :

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


Para todo tipo de archivos, subdirectorios incluidos:

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

Solo archivos (evitando subdirectorios):

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


Si desea contar todos los archivos en el directorio, incluidos los archivos en subdirectorios, la forma más pitonica es:

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

Usamos la suma que es más rápida que la adición explícita de los conteos de archivos (tiempos pendientes)


Si va a utilizar el shell estándar del sistema operativo, puede obtener el resultado mucho más rápido en lugar de utilizar el método puramente pitónico.

Ejemplo para 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))


Utilicé glob.iglob para una estructura de directorio similar a

data └───train │ └───subfolder1 │ | │ file111.png │ | │ file112.png │ | │ ... │ | │ └───subfolder2 │ │ file121.png │ │ file122.png │ │ ... └───test │ file221.png │ file222.png

Ambas opciones devuelven 4 (como se esperaba, es decir, no cuenta las subcarpetas )

  • len(list(glob.iglob("data/train/*/*.png", recursive=True)))
  • sum(1 for i in glob.iglob("data/train/*/*.png"))

os.listdir() será un poco más eficiente que usar glob.glob . Para probar si un nombre de archivo es un archivo ordinario (y no un directorio u otra entidad), use 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))])


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

Tomado de esta publicación


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


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


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


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)


import os print len(os.listdir(os.getcwd()))