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í es donde fnmatch es muy útil:
import fnmatch
print len(fnmatch.filter(os.listdir(dirpath), ''*.txt''))
Más detalles: http://docs.python.org/2/library/fnmatch.html
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()))