7118 Stimmen

Wie kann ich überprüfen, ob eine Datei ohne Ausnahmen existiert?

Wie prüfe ich, ob eine Datei existiert oder nicht, ohne die try Aussage?

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üfen exists 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/

6531voto

rslite Punkte 77347

Wenn der Grund für die Überprüfung darin besteht, dass Sie etwas tun können wie if file_exists: open_it() ist es sicherer, eine try um den Versuch, sie zu öffnen. Beim Prüfen und anschließenden Öffnen besteht die Gefahr, dass die Datei zwischen dem Prüfen und dem Versuch, sie zu öffnen, gelöscht oder verschoben wird.

Wenn Sie nicht vorhaben, die Datei sofort zu öffnen, können Sie mit os.path.isfile

Rückkehr True wenn der Pfad eine bestehende reguläre Datei ist. Dies folgt symbolischen Links, so dass sowohl islink() y isfile() für denselben Pfad wahr sein kann.

import os.path
os.path.isfile(fname) 

wenn Sie sicher sein wollen, dass es sich um eine Datei handelt.

Beginnend mit Python 3.4 ist die pathlib Modul bietet einen objektorientierten Ansatz (zurückportiert auf pathlib2 in Python 2.7):

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists

Um ein Verzeichnis zu überprüfen, gehen Sie wie folgt vor:

if my_file.is_dir():
    # directory exists

Um zu prüfen, ob ein Path Objekt unabhängig davon existiert, ob es sich um eine Datei oder ein Verzeichnis handelt, verwenden Sie exists() :

if my_file.exists():
    # path exists

Sie können auch Folgendes verwenden resolve(strict=True) in einem try Block:

try:
    my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
    # doesn't exist
else:
    # exists

87 Stimmen

In Bezug auf die erste Bemerkung (Verwendung von "try", wenn vor dem Öffnen prüfen) leider wird dies nicht funktionieren, wenn Sie für das Anhängen öffnen wollen sicher sein, dass es vor, da "a"-Modus wird erstellen, wenn nicht vorhanden ist.

20 Stimmen

Beachten Sie, dass FileNotFoundError wurde in Python 3 eingeführt. Wenn Sie sowohl Python 2.7 als auch Python 3 unterstützen müssen, können Sie IOError stattdessen (was FileNotFoundError Unterklassen) stackoverflow.com/a/21368457/1960959

20 Stimmen

@makapuf Sie können es zum "Aktualisieren" öffnen ( open('file', 'r+') ) und dann bis zum Ende suchen.

2607voto

PierreBdR Punkte 40155

Sie haben die os.path.exists Funktion:

import os.path
os.path.exists(file_path)

Dies ergibt True sowohl für Dateien als auch für Verzeichnisse, aber Sie können stattdessen auch

os.path.isfile(file_path)

um zu prüfen, ob es sich um eine bestimmte Datei handelt. Es folgt Symlinks.

1227voto

bortzmeyer Punkte 32353

Anders als isfile() , exists() wird zurückgegeben True für Verzeichnisse. Je nachdem, ob Sie nur einfache Dateien oder auch Verzeichnisse wollen, verwenden Sie also isfile() o exists() . Hier ist eine einfache REPL-Ausgabe:

>>> os.path.isfile("/etc/password.txt")
True
>>> os.path.isfile("/etc")
False
>>> os.path.isfile("/does/not/exist")
False
>>> os.path.exists("/etc/password.txt")
True
>>> os.path.exists("/etc")
True
>>> os.path.exists("/does/not/exist")
False

881voto

Paul Punkte 17733
import os

if os.path.isfile(filepath):
   print("File exists")

427voto

Yugal Jindle Punkte 41559

Utilice os.path.isfile() con os.access() :

import os

PATH = './file.txt'
if os.path.isfile(PATH) and os.access(PATH, os.R_OK):
    print("File exists and is readable")
else:
    print("Either the file is missing or not readable")

75 Stimmen

Mit mehreren Bedingungen, von denen einige überflüssig sind, ist menos klar und deutlich.

19 Stimmen

Außerdem ist sie überflüssig. Wenn die Datei nicht vorhanden ist, os.access() wird false zurückgegeben.

12 Stimmen

@EJP Unter Linux können Dateien existieren, aber nicht zugänglich sein.

CodeJaeger.com

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.

Powered by:

X