Wie prüfe ich, ob eine Datei existiert oder nicht, ohne die try
Aussage?
Bitte fügen Sie bessere Quellen zur Unterstützung Ihrer Aussage hinzu.
Wie prüfe ich, ob eine Datei existiert oder nicht, ohne die try
Aussage?
Ziehen Sie die Anweisung try vor. Sie gilt als besserer Stil und vermeidet Race Conditions.
Verlassen Sie sich nicht auf mein Wort. Es gibt viele Belege für diese Theorie. Hier sind ein paar:
Der zitierte Link Avoiding Race Conditions (apple dev support) unterstützt Ihre Antwort nicht. Er betrifft nur die Verwendung von temporären Dateien, die sensible Informationen enthalten, auf schlecht konzipierten Betriebssystemen, die temporäre Dateien/Verzeichnisse nicht ordnungsgemäß über eingeschränkte Berechtigungen in einer Sandbox unterbringen. Verwendung von try...except
hilft nicht bei der Lösung von dass Problem sowieso.
Das Problem bei dieser Methode ist, dass, wenn ein wichtiger Teil des Codes davon abhängt, dass die Datei nicht existiert, sie in die except:
Klausel sorgt dafür, dass eine Ausnahme, die in diesem Teil Ihres Codes auftritt, eine verwirrende Meldung auslöst (zweiter Fehler, der während der Verarbeitung des ersten Fehlers auftritt).
import os
#Your path here e.g. "C:\Program Files\text.txt"
#For access purposes: "C:\\Program Files\\text.txt"
if os.path.exists("C:\..."):
print "File found!"
else:
print "File not found!"
Importieren von os
erleichtert die Navigation und die Durchführung von Standardaktionen mit Ihrem Betriebssystem.
Als Referenz siehe auch Wie prüft man mit Python, ob eine Datei existiert?
Wenn Sie Operationen auf hoher Ebene benötigen, verwenden Sie shutil
.
Prüfung von Dateien und Ordnern mit os.path.isfile()
, os.path.isdir()
y os.path.exists()
Unter der Annahme, dass der "Pfad" ein gültiger Pfad ist, zeigt diese Tabelle, was von jeder Funktion für Dateien und Ordner zurückgegeben wird:
Sie können auch prüfen, ob es sich bei einer Datei um eine bestimmte Art von Datei handelt, indem Sie os.path.splitext()
um die Durchwahl zu erhalten (falls Sie sie nicht bereits kennen)
>>> import os
>>> path = "path to a word document"
>>> os.path.isfile(path)
True
>>> os.path.splitext(path)[1] == ".docx" # test if the extension is .docx
True
TL;DR
Die Antwort lautet: Verwenden Sie die pathlib
Modul
Pathlib ist wahrscheinlich der modernste und bequemste Weg für fast alle Dateioperationen. Für das Vorhandensein einer Datei oder eine Ordner eine einzige Code-Zeile genügt.
from pathlib import Path
if Path("myfile.txt").exists(): # works for both file and folders
# do your cool stuff...
Le site pathlib
Modul wurde eingeführt in Python 3.4
Sie benötigen also Python 3.4+, diese Bibliothek erleichtert Ihnen die Arbeit mit Dateien und Ordnern und ist sehr einfach zu benutzen, hier finden Sie weitere Informationen dazu ( https://docs.python.org/3/library/pathlib.html ).
Übrigens, wenn Sie den Pfad wiederverwenden wollen, ist es besser, ihn einer Variablen zuzuweisen
wird so zu
from pathlib import Path
p = Path("loc/of/myfile.txt")
if p.exists(): # works for both file and folders
# do stuffs...
#reuse 'p' if needed.
Darf ich fragen: Was ist der Vorteil der Verwendung des Moduls "pathlib" anstelle des Moduls "os" in Python3 für diese Prüfung?
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
16 Stimmen
Um zu prüfen, ob ein Path-Objekt existiert, unabhängig davon, ob es sich um eine Datei oder ein Verzeichnis handelt, verwenden Sie
my_path.exists()
.1 Stimmen
my_path.exists()
ist nicht ausreichend.my_path.is_file()
wird Ihnen sagen, ob es sich um eine Datei handelt (könnte zum Lesen gut sein). Aber wenn Sie die Datei erstellen wollen, müssen Sie auch prüfenexists
schließen Sie also Verzeichnisse oder andere Dinge im Dateisystem, die keine Dateien sind, aus, die den Fehler verursachen.0 Stimmen
Verwenden Sie os.path.isfile, um nur Dateien zu prüfen, und verwenden Sie os.path.exists, um sowohl Dateien als auch Verzeichnisse zu prüfen. Mehr dazu erfahren Sie hier: shortbuzz.in/blog/shortbuzz.in/