¿Cómo puedo enumerar el contenido de un directorio en Python?


Respuestas:



52

De una sola mano:

import os
os.listdir("/home/username/www/")

Otra forma :

glob.glob("/home/username/www/*")

Ejemplos encontrados aquí .

El glob.globmétodo anterior no enumerará los archivos ocultos.

Desde que originalmente respondí esta pregunta hace años, pathlib se ha agregado a Python. Mi forma preferida de listar un directorio ahora generalmente implica el iterdirmétodo en Pathobjetos:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

¿Glob.glob enumeraría archivos ocultos (supongo que se refiere a .XYZarchivos en un contexto de sistema de archivos Unix), cuando se usa con glob.glob("/home/username/www/.*")?
Andy Finkenstadt

Sí, me refiero a los archivos que comienzan con un punto. El ejemplo que dio funcionaría para hacer coincidir los archivos ocultos (y solo los archivos ocultos).
Trey Hunner

Acabo de importar glob y usé glob.glob (r'c: \ users ') pero solo regresó['c:\\users']
Musixauce3000

1
@ Musixauce3000: querrá hacerlo glob.glob(r'c:\users\*')(globalmente, en realidad no enumera los directorios, pero expande los asteriscos y demás, lo que lleva a cabo una tarea similar).
Trey Hunner

38

os.walk se puede usar si necesita recurrencia:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globo os.listdirlo haremos.


import globENTER glob.glob(r'c:\users')ENTER solo parece regresar ['c:\\users']. ¿Porqué es eso? Me gustaría usar glob.glob porque, como han señalado otros usuarios, supuestamente devuelve el contenido de un directorio e ignora también los archivos ocultos. Esto es importante.
Musixauce3000

porque debe especificar un comodín con glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

El osmódulo maneja todas esas cosas.

os.listdir(path)

Devuelve una lista que contiene los nombres de las entradas en el directorio dado por ruta. La lista está en orden arbitrario. No incluye las entradas especiales '.' y '...' incluso si están presentes en el directorio.

Disponibilidad: Unix, Windows.


4

En Python 3.4+, puede usar el nuevo pathlibpaquete:

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()devuelve un iterador, que puede convertirse fácilmente en un list:

contents = list(Path('.').iterdir())

3

Desde Python 3.5, puedes usar os.scandir.

La diferencia es que devuelve entradas de archivo , no nombres. En algunos sistemas operativos como Windows, significa que no tiene que os.path.isdir/filesaber si es un archivo o no, y eso ahorra tiempo de CPU porque statya está hecho al escanear el directorio en Windows:

ejemplo para listar un directorio e imprimir archivos más grandes que max_valuebytes:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(lea una extensa respuesta mía basada en el rendimiento aquí )


2

El siguiente código enumerará los directorios y los archivos dentro del directorio. El otro es os.walk

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.