Python open () da IOError: Errno 2 Ningún 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 alrededor del archivo, dando open() la ruta completa al archivo y nada de esto parece funcionar.
Author: smci, 2012-08-30

5 answers

  • Asegúrese de que el archivo existe: use os.listdir() para ver la lista de archivos en el directorio de trabajo actual
  • Asegúrese de que está en el directorio en el que cree que está os.getcwd() (si lanza su código desde un IDE, puede estar en un directorio diferente)
  • Puede entonces:
    • Llamada os.chdir(dir), dir ser la carpeta donde está el archivo situado, a continuación, abra el archivo con solo su nombre como estaba haciendo.
    • Especifique una ruta absoluta al archivo en su open llamada.
  • Recuerde usar una cadena raw si su ruta usa barras invertidas, como entonces: dir = r'C:\Python32'
    • Si no usas raw-string, tienes que escapar de cada barra invertida: 'C:\\User\\Bob\\...'
    • Las barras inclinadas también funcionan en Windows 'C:/Python32' y no necesitan escaparse.

Permítanme aclarar cómo Python encuentra archivos:

  • Una ruta absoluta {[43] } es una ruta que comienza con el directorio raíz de su computadora, por ejemplo 'C:\Python\scripts..' si estás en Windows.
  • A relative path 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 a os.getcwd().

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

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
 37
Author: Lanaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-09 08:18:56

El archivo puede existir pero puede tener una ruta diferente. Intente 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')
 5
Author: heretolearn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-08 22:06:03

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

Es un error común que las rutas relativas son relativas a la ubicación del script 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 python.

Usted tiene tres opciones:

  • Utilice una ruta absoluta para abrir el archivo:

    file = open(r'C:\path\to\your\file.yaml')
    
  • Genere la ruta al archivo relativa a su script python:

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

    (Véase 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 archivo " error include: {[12]]}

  • Usar accidentalmente 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 raw para las rutas de archivo:

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

    (Véase también: Ruta de Windows en Python )

  • Olvidando que Windows no muestra extensiones de archivo:

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

 1
Author: Aran-Fey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-08 22:39:52

Necesita dar la ruta absoluta donde se encuentra el archivo.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-12 07:14:38

Hay que cambiar la configuración de ejecución

Cambiar...> > > ir a ejecutar configuración... ir a > > > Ejecutar Python vea su nombre de código que va a ejecutar si está mal ,......borra ese nombre en clave innecesario....y luego ejecutarlo con argumentos adecuados

 -3
Author: Akshay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-12 09:26:16