Python genera FileNotFoundError para el nombre de archivo devuelto por os.listdir [duplicado]

Resuelto Aarushi Mishra asked hace 9 años • 3 respuestas

Estaba intentando iterar sobre los archivos en un directorio como este:

import os

path = r'E:/somedir'

for filename in os.listdir(path):
    f = open(filename, 'r')
    ... # process the file

Pero Python estaba arrojando FileNotFoundErrora pesar de que el archivo existe:

Traceback (most recent call last):
  File "E:/ADMTM/TestT.py", line 6, in <module>
    f = open(filename, 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'

Entonces, ¿qué hay de malo aquí?

Aarushi Mishra avatar Mar 02 '15 04:03 Aarushi Mishra
Aceptado

Esto se debe a que os.listdirno devuelve la ruta completa al archivo, solo la parte del nombre del archivo; es decir 'foo.txt', al abrirlo querría 'E:/somedir/foo.txt'porque el archivo no existe en el directorio actual.

Úselo os.path.joinpara anteponer el directorio a su nombre de archivo:

path = r'E:/somedir'

for filename in os.listdir(path):
    with open(os.path.join(path, filename)) as f:
        ... # process the file

(Además, no estás cerrando el archivo; el withbloque se encargará de ello automáticamente).

os.listdir(directory)devuelve una lista de nombres de archivos en directory. Entonces, a menos que directorysea su directorio de trabajo actual, debe unir esos nombres de archivos con el directorio real para obtener una ruta absoluta adecuada:

for filename in os.listdir(path):
    filepath = os.path.join(path, filename)
    f = open(filepath,'r')
    raw = f.read()
    # ...
Lukas Graf avatar Mar 01 '2015 21:03 Lukas Graf