Python open () gibt FileNotFoundError / IOError: Errno 2 Keine solche Datei oder kein solches Verzeichnis

76

Aus irgendeinem Grund hat mein Code Probleme beim Öffnen einer einfachen Datei:

Dies ist der Code:

file1 = open('recentlyUpdated.yaml')

Und der Fehler ist:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Natürlich habe ich überprüft, ob dies der richtige Name der Datei ist.
  • Ich habe versucht, mich in der Datei zu bewegen und open()den vollständigen Pfad zur Datei anzugeben, und nichts davon scheint zu funktionieren.
Santiago
quelle
Stellen Sie sicher, dass Sie alle Dateierweiterungen im Datei-Explorer sehen können ... Wie ich auf die harte Tour gelernt habe.
VortexYT
PyCharm verwenden? ============= Markieren Sie den Ordner, in dem sich die CSV-Datei befindet, als "Quellstamm" -> klicken Sie mit der rechten Maustaste auf den Ordner und "Markieren Sie das Verzeichnis als" und wählen Sie "Quellstamm". Überprüfen Sie auch das Arbeitsverzeichnis im Menü Ausführung / Debug-Konfiguration -> Ausführen -> Konfiguration bearbeiten -> Python-Datei im linken Bereich auswählen -> Stellen Sie sicher, dass das Arbeitsverzeichnis der Stammordner Ihres Projekts ist [ jetbrains.com/help/pycharm/ … [1]: jetbrains.com/help/pycharm/…
Hassan Naqvi

Antworten:

96
  • Stellen Sie sicher, dass die Datei vorhanden ist: Verwenden Sie diese Option os.listdir(), um die Liste der Dateien im aktuellen Arbeitsverzeichnis anzuzeigen
  • Stellen Sie sicher, dass Sie sich in dem Verzeichnis befinden, in dem Sie sich befinden os.getcwd()(wenn Sie Ihren Code über eine IDE starten, befinden Sie sich möglicherweise in einem anderen Verzeichnis).
  • Sie können dann entweder:
    • Rufen os.chdir(dir), dirwobei der Ordner , in dem sich die Datei befindet, öffnen Sie die Datei mit nur seinen Namen , wie Sie taten.
    • Geben Sie in Ihrem openAnruf einen absoluten Pfad zur Datei an .
  • Denken Sie daran, eine rohe Zeichenfolge zu verwenden, wenn Ihr Pfad Backslashes verwendet, wie folgt: dir = r'C:\Python32'
    • Wenn Sie keinen Raw-String verwenden, müssen Sie jedem Backslash entkommen: 'C:\\User\\Bob\\...'
    • Schrägstriche funktionieren auch unter Windows 'C:/Python32'und müssen nicht maskiert werden.

Lassen Sie mich klarstellen, wie Python Dateien findet:

  • Ein absoluter Pfad ist ein Pfad, der mit dem Stammverzeichnis Ihres Computers beginnt, z. B. "C: \ Python \ scripts ..", wenn Sie unter Windows arbeiten.
  • Ein relativer Pfad ist ein Pfad, der nicht mit dem Stammverzeichnis Ihres Computers beginnt, sondern relativ zu etwas ist, das als "Pfad" bezeichnet wird working directory. Sie können das aktuelle Arbeitsverzeichnis von Python anzeigen, indem Sie aufrufen os.getcwd().

Wenn Sie dies versuchen, open('sortedLists.yaml')wird Python feststellen, dass Sie einen relativen Pfad übergeben, sodass nach der Datei im aktuellen Arbeitsverzeichnis gesucht wird. Durch Aufrufen os.chdirwird das aktuelle Arbeitsverzeichnis geändert.

Beispiel: Nehmen wir an, es file.txtbefindet sich in C:\Folder.

Um es zu öffnen, können Sie:

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

oder

open(r'C:\Folder\file.txt') #full path
Lanaru
quelle
Muss ich bei Verwendung von os.chdir (dir) den Pfad zum Verzeichnis oder nur den Verzeichnisnamen angeben? Wenn ich den Namen der Datei erhalten habe, füge ich ihn in open () ein oder schreibe ich open (os.chdir (dir))?
Santiago
@ Santiago Ich habe dies in meiner Antwort klargestellt.
Lanaru
3
+ 1 für rohe Saite r ''
WKordos
Sie können dieselbe Technik verwenden, um einen beliebigen Dateityp zu öffnen. Sie müssen jedoch ein 'b'zweites Argument in der Funktion open übergeben, um anzugeben, dass Sie eine Datei als Binärdaten lesen.
Lanaru
3
+1 für den Vorschlag os.listdir (). Dies ist einer der Momente, in denen Sie auf der Tastatur ins Gesicht schlagen. Wenn Sie jedoch unter Windows 10 arbeiten, stellen Sie sicher, dass Sie keine Dateierweiterung manuell hinzugefügt haben, wo bereits eine vorhanden ist. Die Standardansicht in Windows verbirgt häufig Erweiterungen und sieht möglicherweise wie 'fileName.txt' aus, wobei der Name tatsächlich 'fileName.txt.txt' lautet, wenn Sie diesen Fehler gemacht haben. Schauen Sie sich zur Überprüfung die Ausgabe von os.listdir () genau an. Diese Nichtübereinstimmung des Dateinamens würde Ihnen auch den Fehler "[Errno 2] Keine solche Datei oder kein solches Verzeichnis:" geben. Ich weiß, ich weiß. Meine Stirn hat immer noch Leertastenabdrücke.
DCaugs
10

Das Problem besteht höchstwahrscheinlich darin, dass Sie zum Öffnen der Datei einen relativen Dateipfad verwenden, das aktuelle Arbeitsverzeichnis jedoch nicht auf das eingestellt ist, was Sie denken.

Es ist ein weit verbreitetes Missverständnis, dass relative Pfade relativ zum Speicherort des Python-Skripts sind, aber dies ist nicht wahr. Relative Dateipfade sind immer relativ zum aktuellen Arbeitsverzeichnis, und das aktuelle Arbeitsverzeichnis muss nicht der Speicherort Ihres Python-Skripts sein.

Sie haben drei Möglichkeiten:

  • Verwenden Sie einen absoluten Pfad, um die Datei zu öffnen:

    file = open(r'C:\path\to\your\file.yaml')
    
  • Generieren Sie den Pfad zur Datei relativ zu Ihrem Python-Skript:

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

    (Siehe auch: Wie erhalte ich den Pfad und den Namen der Datei, die gerade ausgeführt wird? )

  • Ändern Sie das aktuelle Arbeitsverzeichnis, bevor Sie die Datei öffnen:

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

Andere häufige Fehler, die einen Fehler "Datei nicht gefunden" verursachen können, sind:

  • Versehentliche Verwendung von Escape-Sequenzen in einem Dateipfad:

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

    Um diesen Fehler zu vermeiden, denken Sie daran, rohe Zeichenfolgenliterale für Dateipfade zu verwenden:

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

    (Siehe auch: Windows-Pfad in Python )

  • Vergessen, dass Windows keine Dateierweiterungen anzeigt:

    Da Windows keine bekannten Dateierweiterungen anzeigt, wird Ihre Datei manchmal file.yamltatsächlich benannt , wenn Sie glauben , dass sie benannt ist file.yaml.yaml. Überprüfen Sie die Dateierweiterung.

Aran-Fey
quelle
6

Die Datei ist möglicherweise vorhanden, hat jedoch möglicherweise einen anderen Pfad. Versuchen Sie, den absoluten Pfad für die Datei zu schreiben.

Versuchen Sie die os.listdir()Funktion, um zu überprüfen, ob mindestens Python die Datei sieht.

Versuchen Sie es so:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')
heretolearn
quelle
1
Es scheint keine Dateipfade auf meinem Computer zu erkennen. Kann ich auf irgendeine Weise nach einer Datei suchen? @sshekar
Santiago
2

Möglicherweise haben Sie die 'Datei1' geschlossen.
Verwenden Sie einfach das Flag 'w', um eine neue Datei zu erstellen:

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

mode ist eine optionale Zeichenfolge, die den Modus angibt, in dem die Datei geöffnet wird. Der Standardwert ist 'r', was bedeutet, dass er im Textmodus zum Lesen geöffnet ist. Andere gebräuchliche Werte sind 'w' zum Schreiben (Abschneiden der Datei, falls bereits vorhanden) ...

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

zögerte
quelle
1

Wenn VSCode ist, lesen Sie den Arbeitsbereich. Wenn Sie sich in einem anderen Arbeitsbereich befinden, kann dieser Fehler auftreten

zzfima
quelle
Vielen Dank! Muss einen neuen Ordner öffnen, Optimus Prime!
m4n0