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.
Antworten:
os.listdir()
, um die Liste der Dateien im aktuellen Arbeitsverzeichnis anzuzeigenos.getcwd()
(wenn Sie Ihren Code über eine IDE starten, befinden Sie sich möglicherweise in einem anderen Verzeichnis).os.chdir(dir)
,dir
wobei der Ordner , in dem sich die Datei befindet, öffnen Sie die Datei mit nur seinen Namen , wie Sie taten.open
Anruf einen absoluten Pfad zur Datei an .dir = r'C:\Python32'
'C:\\User\\Bob\\...'
'C:/Python32'
und müssen nicht maskiert werden.Lassen Sie mich klarstellen, wie Python Dateien findet:
working directory
. Sie können das aktuelle Arbeitsverzeichnis von Python anzeigen, indem Sie aufrufenos.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 Aufrufenos.chdir
wird das aktuelle Arbeitsverzeichnis geändert.Beispiel: Nehmen wir an, es
file.txt
befindet sich inC:\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
quelle
'b'
zweites Argument in der Funktion open übergeben, um anzugeben, dass Sie eine Datei als Binärdaten lesen.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.yaml
tatsächlich benannt , wenn Sie glauben , dass sie benannt istfile.yaml.yaml
. Überprüfen Sie die Dateierweiterung.quelle
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')
quelle
Möglicherweise haben Sie die 'Datei1' geschlossen.
Verwenden Sie einfach das Flag 'w', um eine neue Datei zu erstellen:
file1 = open('recentlyUpdated.yaml', 'w')
(Siehe auch https://docs.python.org/3/library/functions.html?highlight=open#open )
quelle
Wenn VSCode ist, lesen Sie den Arbeitsbereich. Wenn Sie sich in einem anderen Arbeitsbereich befinden, kann dieser Fehler auftreten
quelle