2009-03-01 22 views
7

Cuando uso el método os.listdir necesito decir qué elemento de la lista resultante es un directorio o solo un archivo.¿Cómo puedo contar un archivo desde el directorio en Python?

He tenido un problema cuando tuve que revisar todos los directorios de esta lista y luego agregar un archivo en cada directorio.

¿Hay alguna manera de revisar esta lista y eliminar todos los archivos? Si no es posible hacerlo con os.listdir, ¿qué método debo usar en su lugar?

Gracias.

Respuesta

16

Utilice os.path.isdir para filtrar los directorios. Posiblemente algo así como

dirs = filter(os.path.isdir, os.listdir('/path')) 
for dir in dirs: 
    # add your file 
+1

¡Gracias por la respuesta rápida! Revisé help (os.path) y descubrí que quizás el archivo isfile (path) sería útil también. isdir (s) Devuelve verdadero si el nombre de ruta hace referencia a un directorio existente. isfile (ruta) Compruebe si una ruta es un archivo normal –

+0

No olvide probar si un archivo es un enlace flexible: islink y ismount si un archivo es el punto de montaje de un dispositivo. –

+4

Un aviso que 'listdir()' no devuelve los archivos y directorios de la ruta dada (''/ path'' en el ejemplo) con rutas absolutas, sino solo con el nombre del archivo. Y creo que 'isdir()'/'isfile()' etc comprueba en relación con el directorio de trabajo actual, por lo que el 'filtro()' podría no funcionar a menos que convierta los valores devueltos de 'listdir' en rutas. – Parham

2

dirs = filtro (os.path.isdir, os.listdir ('/ path'))

Nota esto no funcionará a menos '/ ruta' es el directorio de trabajo actual. os.listdir() devuelve los nombres de las hojas, por lo que le preguntará "os.path.isdir ('file.txt')", y si el directorio actual está en otra parte, estará buscando el 'archivo.txt' incorrecto.

os.path.join() se debe utilizar en la salida de os.listdir() para obtener un nombre de archivo completo.

children= [os.path.join('/path', child) for child in os.listdir('/path')] 
directories= filter(os.path.isdir, children) 
+0

Lo he hecho de esta manera. dir = os.listdir (dir) i = len (dir) -1 mientras i> -1: si os.path.isfile (Odir + '\\' + dir [i]): del dir [i] i = i-1 donde dir es un directorio definido por el usuario. Funciona bien –

+0

Se olvidó de mencionar: odir = dir # 'odir' significa 'directorio original' Así que 'odir' contiene el directorio definido por el usuario, después de 'dir' se cambia a una lista. PD ¿Hay alguna manera de editar comentarios? O_o –

+0

Los borras y vuelves a publicar, pretendiendo que no pasó nada :-) – bobince

7

Esto podría ser más rápido:

current, dirs, files = os.walk('/path').next() 

La lista de directorios estarán en la variable dirs.

+0

¡De acuerdo!Lo intentaré también, gracias. –

+1

awesome, very nice methode – Serg

Cuestiones relacionadas