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 en sí como un archivo.
¿Hay alguna manera de contar solo los archivos en un directorio?
Respuestas:
os.listdir()
será un poco más eficiente que usarglob.glob
. Para probar si un nombre de archivo es un archivo ordinario (y no un directorio u otra entidad), useos.path.isfile()
:fuente
folder_path
interioros.path.filename(name)
si no está en el cwd. stackoverflow.com/questions/17893542/…os.path.join(DIR, name)
másDIR + '/' + name
? El último es más corto y, en mi opinión, más claro que el primero. ¿Hay quizás algunos OS: es en los que este último fallaría?fuente
Para todo tipo de archivos, los subdirectorios incluyen:
Solo archivos (evitando subdirectorios):
fuente
Aquí es donde fnmatch es muy útil:
Más detalles: http://docs.python.org/2/library/fnmatch.html
fuente
os.path.isfile()
la respuesta aceptada. También significativamente más rápido queglob.glob()
.Si desea contar todos los archivos en el directorio, incluidos los archivos en subdirectorios, la forma más pitónica es:
Usamos suma que es más rápida que agregar explícitamente los recuentos de archivos (tiempos pendientes)
fuente
_
en unfor
bucle.os.walk
También lo sé. Pero no estoy seguro de lo que está sucediendo con los guiones bajos dentro de lasum
función, ¿podría explicarlo? ¡Gracias!fuente
fuente
Me sorprende que nadie haya mencionado
os.scandir
:fuente
Esto usa
os.listdir
y funciona para cualquier directorio:Esto puede simplificarse con un generador y hacerse un poco más rápido con:
fuente
Tomado de esta publicación
fuente
files
es una lista. 2. OP no busca recuento recursivofuente
El reformateo del código de Luke.
fuente
Aquí hay un comando simple de una línea que me pareció útil:
fuente
ls
es generalmente mal visto (con frecuencia puede causar problemas), aunque este no es un mal método "rápido y sucio" en el shell. Sinls -1
embargo, debe usarlo , por lo que garantiza una línea por archivo.Si bien estoy de acuerdo con la respuesta proporcionada por @DanielStutzbach:
os.listdir()
será un poco más eficiente que usarglob.glob
.Sin embargo, una precisión adicional, si desea contar el número de archivos específicos en la carpeta, desea utilizar
len(glob.glob())
. Por ejemplo, si tuviera que contar todos los archivos PDF en una carpeta que desea utilizar:fuente
Es simple:
simplemente cuenta el número de archivos en el directorio, he usado la técnica de comprensión de listas para iterar a través de un directorio específico y devolver todos los archivos a cambio. "len (lista devuelta)" devuelve el número de archivos.
fuente
fuente
Si va a utilizar el shell estándar del sistema operativo, puede obtener el resultado mucho más rápido en lugar de utilizar la forma pitónica pura.
Ejemplo para Windows:
fuente
Encontré otra respuesta que puede ser correcta como respuesta aceptada.
fuente
Solía
glob.iglob
una estructura de directorio similar aLas dos opciones siguientes 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"))
fuente
Hice esto y devolvió el número de archivos en la carpeta (Attack_Data) ... esto funciona bien.
fuente