Python open () donne IOError: Errno 2 pas de tel fichier ou répertoire

pour une raison quelconque, mon code a du mal à ouvrir un fichier simple:

C'est le code:

file1 = open('recentlyUpdated.yaml')

et l'erreur est:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Naturellement, j'ai vérifié que c'est le nom exact du fichier.
  • j'ai essayé de faire le tour du fichier, donnant à open() le chemin complet vers le fichier et rien de tout cela ne semble fonctionner.
33
demandé sur smci 2012-08-30 21:01:39

5 réponses

  • assurez-vous que le fichier existe: utilisez os.listdir() pour voir la liste des fichiers du répertoire courant
  • assurez-vous d'être dans le répertoire dans lequel vous pensez être avec os.getcwd() (si vous lancez votre code à partir d'un IDE, vous pourriez bien être dans un répertoire différent)
  • vous pouvez alors soit:
    • Call os.chdir(dir) , dir étant le dossier où le fichier est situé, puis ouvrir le fichier avec juste son nom, comme vous le faisiez.
    • spécifiez un chemin absolu vers le fichier dans votre appel open .
  • N'oubliez pas d'utiliser une chaîne brute si votre chemin utilise des antislashs, comme so: dir = r'C:\Python32'
    • si vous n'utilisez pas de chaîne brute, vous devez échapper à tous les antislashs: 'C:\User\Bob\...'
    • Forward-slashes fonctionne également sur les fenêtres 'C:/Python32' et ne doit pas être échappé.

permettez-moi de clarifier comment Python trouve les fichiers:

  • An absolute path est un chemin qui commence avec le répertoire racine de votre ordinateur, par exemple "C:\Python\scripts.."si vous êtes sur Windows.
  • A relative path est un chemin qui ne commence pas avec le répertoire racine de votre ordinateur, et est plutôt relative à quelque chose appelé le working directory . Vous pouvez consulter le répertoire de travail actuel de Python en appelant os.getcwd() .

si vous essayez de faire open('sortedLists.yaml') , Python verra que vous lui passez un chemin relatif, donc il cherchera le fichier dans le répertoire de travail courant. Appeler os.chdir changera le répertoire courant.

exemple: disons que file.txt se trouve dans C:\Folder .

Pour l'ouvrir, vous pouvez do:

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

ou

open(r'C:\Folder\file.txt') #full path
37
répondu Lanaru 2018-09-09 08:18:56

le fichier peut être existant mais avoir un chemin différent. Essayez d'écrire le chemin absolu vers le fichier.

Try os.listdir() fonction pour vérifier qu'atleast python voit le fichier.

essayez comme ceci:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')
5
répondu heretolearn 2018-09-08 22:06:03

très probablement, le problème est que vous utilisez un chemin de fichier relatif pour ouvrir le fichier, mais le répertoire de travail courant n'est pas défini à ce que vous pensez qu'il est.

C'est une idée fausse commune que les chemins relatifs sont relatives à l'emplacement du script python, mais c'est faux. Les chemins relatifs des fichiers sont toujours relatifs au répertoire de travail courant, et le répertoire de travail courant n'a pas à être localisation de votre script python.

vous avez trois options:

  • utilisez un chemin absolu pour ouvrir le fichier:

    file = open(r'C:\path\to\your\file.yaml')
    
  • générer le chemin du fichier relatif à votre script python:

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

    (Voir aussi: Comment obtenir le chemin et le nom du fichier qui est actuellement l'exécution? )

  • modifier le répertoire courant avant d'ouvrir le fichier:

    import os
    
    os.chdir(r'C:\path\to\your\file')
    file = open('file.yaml')
    

D'autres erreurs courantes qui pourraient causer une erreur "fichier non trouvé" comprennent:

  • utilisation accidentelle de séquences d'échappement dans un chemin de fichier:

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

    pour éviter de faire cette erreur, n'oubliez pas d'utiliser littérales de chaîne brutes pour les chemins de fichier:

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

    (Voir aussi: chemin Windows en Python )

  • oubliant que Windows n'affiche pas les extensions de fichier:

    depuis Windows n'affiche pas les extensions de fichier connues, parfois quand vous pensez que votre fichier est nommé file.yaml , il est en fait nommé file.yaml.yaml . Vérifiez l'extension de votre fichier.

1
répondu Aran-Fey 2018-09-08 22:39:52

Vous devez donner le chemin absolu du fichier.

0
répondu 2018-09-12 07:14:38

la configuration d'exécution doit être changée

du changement...>>> aller à la configuration d'exécution... aller à>>> Python exécuter voir votre nom de code que vous allez lancer si elle est fausse ,......supprimez ce nom de code inutile....et puis l'exécuter avec les arguments appropriés

-3
répondu Akshay 2017-12-12 09:26:16