134 votes

open() donne FileNotFoundError/IOError : Errno 2 No such file or directory

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

Voici le code :

file1 = open('recentlyUpdated.yaml')

Et l'erreur est :

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • J'ai bien sûr vérifié que c'est le nom correct du fichier.
  • J'ai essayé de déplacer le fichier, en donnant open() le chemin complet du fichier et rien de tout cela ne semble fonctionner.

169voto

Lanaru Points 2935
  • Assurez-vous que le fichier existe : utilisez os.listdir() pour voir la liste des fichiers dans le répertoire de travail actuel
  • Assurez-vous d'être dans le répertoire que vous pensez être avec os.getcwd() (si vous lancez votre code à partir d'un IDE, vous pouvez très bien être dans un répertoire différent)
  • Vous pouvez alors soit :
    • Appelez os.chdir(dir) , dir étant le dossier où se trouve le fichier puis ouvrez le fichier avec son seul nom comme vous le faisiez.
    • Indiquez un chemin d'accès absolu au fichier dans votre fichier open appeler.
  • N'oubliez pas d'utiliser une chaîne brute si votre chemin d'accès utilise des antislashs, comme ainsi : dir = r'C:\Python32'
    • Si vous n'utilisez pas raw-string, vous devez échapper chaque backslash : 'C:\\User\\Bob\\...'
    • Les barres obliques fonctionnent également sous Windows 'C:/Python32' et n'ont pas besoin d'être échappés.

Permettez-moi de préciser comment Python trouve les fichiers :

  • Un site chemin absolu est un chemin qui commence par le répertoire racine de votre ordinateur, par exemple C:\Python\scripts si vous êtes sous Windows.
  • A chemin relatif est un chemin d'accès qui ne commence pas par le répertoire racine de votre ordinateur, mais qui est plutôt relatif à un élément appelé le répertoire de travail . Vous pouvez afficher 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 transmettez un chemin relatif, et cherchera donc le fichier dans le répertoire de travail actuel.

Appel à os.chdir() changera le répertoire de travail actuel.

Exemple : Disons que file.txt se trouve dans C:\Folder .

Pour l'ouvrir, vous pouvez le faire :

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

o

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

37voto

Aran-Fey Points 20414

Il est fort probable que le problème soit que vous utilisez une chemin de fichier relatif pour ouvrir le fichier, mais le le répertoire de travail actuel n'est pas réglé sur ce que vous pensez.

On croit souvent à tort que les chemins relatifs sont relatifs à l'emplacement du script python, mais c'est faux. Les chemins de fichiers relatifs sont toujours relatifs au répertoire de travail actuel, et le répertoire de travail actuel ne doit pas nécessairement être l'emplacement 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ère 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 puis-je obtenir le chemin et le nom du fichier en cours d'exécution ? )

  • Change le répertoire de travail actuel avant d'ouvrir le fichier :

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

Voici d'autres erreurs courantes susceptibles de provoquer l'erreur "fichier non trouvé" :

  • 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 commettre cette erreur, pensez à utiliser chaînes de caractères brutes pour les chemins de fichiers :

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

    (Voir aussi : Chemin de Windows en Python )

  • Oublier que Windows n'affiche pas les extensions de fichiers :

    Puisque Windows n'affiche pas les extensions de fichiers connues, parfois, lorsque vous pensez que votre fichier s'appelle file.yaml il s'appelle en fait file.yaml.yaml . Vérifiez l'extension de votre fichier.

7voto

heretolearn Points 2515

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

Essayez os.listdir() pour vérifier qu'au moins python voit le fichier.

Essayez comme ça :

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

3voto

hesed Points 119

Il est possible que vous ayez fermé le 'file1'.
Il suffit d'utiliser le drapeau 'w', qui crée un nouveau fichier :

file1 = open('recentlyUpdated.yaml', 'w')

mode est une chaîne facultative qui spécifie le mode dans lequel le fichier est ouvert. La valeur par défaut est 'r', ce qui signifie que le fichier est ouvert pour la lecture en mode texte. en mode texte. Les autres valeurs courantes sont 'w' pour l'écriture (en tronquant le fichier si s'il existe déjà)...

(voir aussi https://docs.python.org/3/library/functions.html?highlight=open#open )

3voto

zzfima Points 529

Si c'est VSCode voir l'espace de travail. Si vous êtes dans un autre espace de travail, cette erreur peut survenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X