web-dev-qa-db-fra.com

Python open () donne IOError: Errno 2 Aucun fichier ou répertoire de ce type

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 la suivante:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Naturellement, j'ai vérifié qu'il s'agissait du nom correct du fichier.
  • J'ai essayé de me déplacer dans le fichier, en donnant à open() le chemin d'accès complet au fichier, mais rien ne semble fonctionner.
48
Santiago
  • Assurez-vous que le fichier existe: utilisez os.listdir() pour voir la liste des fichiers du répertoire de travail actuel
  • Assurez-vous que vous êtes dans le répertoire que vous pensez utiliser avec os.getcwd() (si vous lancez votre code à partir d'un IDE, vous risquez de vous trouver dans un autre répertoire).
  • Vous pouvez alors soit:
    • Appelez os.chdir(dir), dir étant le dossier dans lequel se trouve le fichier, puis ouvrez 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 barres obliques inverses, comme suit: dir = r'C:\Python32'
    • Si vous n'utilisez pas raw-string, vous devez échapper chaque barre oblique inverse: 'C:\\User\\Bob\\...'
    • Les barres obliques fonctionnent également sous Windows 'C:/Python32' et ne nécessitent pas d'échappement.

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

  • Un chemin absol est un chemin qui commence par le répertoire racine de votre ordinateur, par exemple, 'C:\Python\scripts ..' si vous êtes sous Windows.
  • Un chemin relatif est un chemin qui ne commence pas par le répertoire racine de votre ordinateur, mais plutôt par rapport à quelque chose appelé le working directory. 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, donc il recherchera le fichier dans le répertoire de travail en cours. L'appel de os.chdir changera le répertoire de travail actuel.

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

Pour l'ouvrir, vous pouvez faire:

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
58
Lanaru

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

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

Essayez comme ça:

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

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

Il est courant de croire à tort que les chemins relatifs sont relatifs à l'emplacement du script python, mais cela 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érez le chemin d'accès au fichier par rapport à 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? )

  • Modifiez 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')
    

Les autres erreurs courantes pouvant provoquer une erreur "fichier non trouvé" incluent:

  • 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 littéraux de chaîne brute pour les chemins de fichiers:

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

    (Voir aussi: chemin Windows sous Python )

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

    Comme Windows n’affiche pas les extensions de fichier connues, il arrive parfois que vous pensiez que votre fichier s’appelle file.yaml, mais il s’appelle en fait file.yaml.yaml. Vérifiez l'extension de votre fichier.

4
Aran-Fey

Vous avez peut-être fermé le 'fichier1'.
Il suffit d'utiliser l'indicateur 'w' pour créer 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 ouvert pour la lecture en mode texte. Les autres valeurs communes sont 'w' pour l'écriture (tronquant le fichier s'il existe déjà) ...

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

0
Maxim Temny