Python open () proporciona IOError: Errno 2 No existe tal archivo o directorio

Por alguna razón, mi código está teniendo problemas para abrir un archivo simple:

Este es el código:

file1 = open('recentlyUpdated.yaml') 

Y el error es:

 IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml' 
  • Naturalmente, he comprobado que este es el nombre correcto del archivo.
  • He intentado moverme por el archivo, dando a open() la ruta completa al archivo y nada parece funcionar.

  • 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 está con os.getcwd() (si os.getcwd() su código desde un IDE, es posible que esté en un directorio diferente)
  • Usted puede entonces:
    • Llame a os.chdir(dir) , dir es la carpeta donde se encuentra el archivo, luego abra el archivo con el nombre que estaba haciendo.
    • Especifique una ruta absoluta al archivo en su llamada open .
  • Recuerde usar una cadena en bruto si su ruta usa barras diagonales inversas, como así: dir = r'C:\Python32'
    • Si no usa una cadena sin formato, debe escapar de cada barra invertida: 'C:\\User\\Bob\\...'
    • Las barras diagonales hacia adelante también funcionan en Windows 'C:/Python32' y no necesitan escaparse.

Permítanme aclarar cómo Python encuentra los archivos:

  • Una ruta absoluta es una ruta que comienza con el directorio raíz de su computadora, por ejemplo, ‘C: \ Python \ scripts …’ si está en Windows.
  • Una ruta relativa es una ruta que no comienza con el directorio raíz de su computadora y, en cambio, es relativa a algo que se llama el working directory . Puede ver el directorio de trabajo actual de Python llamando a os.getcwd() .

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

Ejemplo: Digamos que file.txt se encuentra en C:\Folder .

Para abrirlo, puedes hacer:

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

o

 open(r'C:\Folder\file.txt') #full path 

El archivo puede existir pero puede tener una ruta diferente. Intenta escribir la ruta absoluta para el archivo.

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

Pruébalo así:

 file1 = open(r'Drive:\Dir\recentlyUpdated.yaml') 

Probablemente, el problema es 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 de la secuencia de comandos 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:

  • Use una ruta absoluta para abrir el archivo:

     file = open(r'C:\path\to\your\file.yaml') 
  • Genere la ruta al archivo en relación con su script de python:

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

    (Ver 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:\path\to\your\file') file = open('file.yaml') 

Otros errores comunes que podrían causar un error de “archivo no encontrado” incluyen:

  • Accidentalmente utilizando secuencias de escape en una ruta de archivo:

     path = 'C:\Users\newton\file.yaml' # Incorrect! The '\n' in 'Users\newton' is a line break character! 

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

     path = r'C:\Users\newton\file.yaml' # Correct! 

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

  • Olvidando que Windows no muestra las extensiones de archivo:

    Dado que Windows no muestra las extensiones de archivo conocidas, a veces cuando piensa que su archivo se llama file.yaml , en realidad se llama file.yaml.yaml . Compruebe la extensión de su archivo.