Saltar al contenido

Python open () da FileNotFoundError / IOError: Errno 2 No existe tal archivo o directorio

Solución:

  • Asegúrese de que el archivo exista: use os.listdir() para ver la lista de archivos en el directorio de trabajo actual
  • Asegúrese de estar en el directorio en el que cree que se encuentra os.getcwd() (si lanza su código desde un IDE, es posible que esté en un directorio diferente)
  • Entonces puede:
    • Llama os.chdir(dir), dir siendo la carpeta donde se encuentra el archivo, luego abra el archivo con solo su nombre como lo estaba haciendo.
    • Especifique una ruta absoluta al archivo en su open llama.
  • Recuerde usar una cadena sin formato si su ruta usa barras invertidas, así: dir = r'C:Python32'
    • Si no usa una cadena sin formato, debe escapar de cada barra invertida: 'C:\User\Bob\...'
    • Las barras diagonales también funcionan en Windows 'C:/Python32' y no necesitas escapar.

Permítanme aclarar cómo Python encuentra archivos:

  • Un camino absoluto es una ruta que comienza con el directorio raíz de su computadora, por ejemplo, ‘C: Python scripts ..’ si está en Windows.
  • A camino relativo es una ruta que no comienza con el directorio raíz de su computadora, sino que es relativa a algo llamado working directory. Puede ver el directorio de trabajo actual de Python llamando os.getcwd().

Si intentas hacer open('sortedLists.yaml'), Python verá que le está pasando una ruta relativa, por lo que buscará el archivo dentro del directorio de trabajo actual. Vocación os.chdir cambiará el directorio de trabajo actual.

Ejemplo: digamos file.txt se encuentra en C:Folder.

Para abrirlo, puede hacer:

os.chdir(r'C:Folder')
open('file.txt') #relative path, looks inside the current working directory

o

open(r'C:Folderfile.txt') #full path

Lo más probable es que el problema sea que está utilizando una ruta de archivo relativa para abrir el archivo, pero el directorio de trabajo actual no está configurado como cree que es.

Es un error común pensar que las rutas relativas son relativas a la ubicación del script de Python, pero esto no es cierto. Las rutas de archivo relativas siempre son relativas al directorio de trabajo actual, y el directorio de trabajo actual no tiene que ser la ubicación de su script de Python.

Tienes tres opciones:

  • Utilice una ruta absoluta para abrir el archivo:

    file = open(r'C:pathtoyourfile.yaml')
    
  • Genere la ruta al archivo relativa a su secuencia de comandos de Python:

    from pathlib import Path
    
    script_location = Path(__file__).absolute().parent
    file_location = script_location / 'file.yaml'
    file = file_location.open()
    

    (Consulte también: ¿Cómo obtengo la ruta y el nombre del archivo que se está ejecutando actualmente?)

  • Cambie el directorio de trabajo actual antes de abrir el archivo:

    import os
    
    os.chdir(r'C:pathtoyourfile')
    file = open('file.yaml')
    

Otros errores comunes que pueden causar un error de “archivo no encontrado” incluyen:

  • Uso accidental de secuencias de escape en una ruta de archivo:

    path="C:Usersnewtonfile.yaml"
    # Incorrect! The 'n' in 'Usersnewton' is a line break character!
    

    Para evitar cometer este error, recuerde utilizar literales de cadena sin formato para las rutas de archivo:

    path = r'C:Usersnewtonfile.yaml'
    # Correct!
    

    (Ver también: ruta de Windows en Python)

  • Olvidando que Windows no muestra extensiones de archivo:

    Dado que Windows no muestra extensiones de archivo conocidas, a veces, cuando cree que su archivo tiene un nombre file.yaml, en realidad se llama file.yaml.yaml. Vuelva a verificar la extensión de su archivo.

El archivo puede existir pero puede tener una ruta diferente. Intente escribir la ruta absoluta del archivo.

Tratar os.listdir() función para comprobar que al menos Python ve el archivo.

Pruébelo así:

file1 = open(r'Drive:DirrecentlyUpdated.yaml')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *