Python genera FileNotFoundError para el nombre de archivo devuelto por os.listdir [duplicado]
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 FileNotFoundError
a 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í?
Esto se debe a que os.listdir
no 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.join
para 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 with
bloque se encargará de ello automáticamente).
os.listdir(directory)
devuelve una lista de nombres de archivos en directory
. Entonces, a menos que directory
sea 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()
# ...