löschen python Wie überprüfe ich, ob eine Datei ohne Ausnahmen existiert?



15 Answers

Sie haben die os.path.exists Funktion:

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

Dies gibt True für Dateien und Verzeichnisse zurück. Sie können jedoch stattdessen verwenden

os.path.isfile(file_path)

um zu testen, ob es sich um eine Datei handelt. Es folgt Symlinks.

python 3 prüfen ob datei existiert

Wie kann ich sehen, ob eine Datei existiert oder nicht, ohne die try Anweisung zu verwenden?




import os.path

if os.path.isfile(filepath):



import os
os.path.exists(path) # Returns whether the path (directory or file) exists or not
os.path.isfile(path) # Returns whether the file exists or not



Dies ist der einfachste Weg, um zu prüfen, ob eine Datei existiert. Nur weil die Datei beim Prüfen vorhanden war, kann nicht garantiert werden, dass sie beim Öffnen vorhanden ist.

import os
fname = "foo.txt"
if os.path.isfile(fname):
    print("file does exist at this time")
else:
    print("no such file exists at this time")






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!"

Durch das Importieren von os Sie einfacher mit Ihrem Betriebssystem navigieren und Standardaktionen ausführen.

Weitere Informationen finden Sie unter share

Wenn Sie Vorgänge auf hoher Ebene benötigen, verwenden Sie shutil .




In 2016 ist der beste Weg noch os.path.isfile :

>>> os.path.isfile('/path/to/some/file.txt')

Oder in Python 3 können Sie pathlib :

import pathlib
path = pathlib.Path('/path/to/some/file.txt')
if path.is_file():
    ...



Sie könnten dies versuchen (sicherer):

try:
    # http://effbot.org/zone/python-with-statement.htm
    # 'with' is safer to open a file
    with open('whatever.txt') as fh:
        # Do something with 'fh'
except IOError as e:
    print("({})".format(e))

Die Ausgabe wäre:

([Errno 2] Keine solche Datei oder Verzeichnis: 'whatever.txt')

Abhängig vom Ergebnis kann Ihr Programm von dort aus weiterlaufen, oder Sie können es programmieren, um es zu stoppen, wenn Sie möchten.




In Python 3.4 bietet die Sprache ein neues Modul zum Verwalten von Dateien:

import pathlib
path = pathlib.Path('path/to/file')
if path.is_file(): # If you want to check a directory: path.is_dir()
    # If it is true, return true on your code.



Wenn die Datei geöffnet werden soll, können Sie eine der folgenden Techniken anwenden:

>>> with open('somefile', 'xt') as f: #Using the x-flag, Python3.3 and above
...     f.write('Hello\n')

>>> if not os.path.exists('somefile'): 
...     with open('somefile', 'wt') as f:
...         f.write("Hello\n")
... else:
...     print('File already exists!')

AKTUALISIEREN

Um Verwirrung zu vermeiden und anhand der Antworten, die ich erhalten habe, findet die aktuelle Antwort entweder eine Datei oder ein Verzeichnis mit dem angegebenen Namen.




Sie können Brians Vorschlag ohne schreiben try:.

from contextlib import suppress

with suppress(IOError), open('filename'):
    process()

suppressist ein Teil von Python 3.4. In älteren Releases können Sie schnell eigene Unterdrückung schreiben:

from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass



Hier ist ein einzeiliger Python-Befehl für die Linux-Befehlszeilenumgebung. Ich finde das SEHR HANDIG, da ich kein so heißer Kerl bin.

python -c "import os.path; print os.path.isfile('/path_to/file.xxx')"

Ich hoffe das ist hilfreich.




Ich bin der Autor eines Pakets, das seit etwa 10 Jahren existiert, und hat eine Funktion, die diese Frage direkt anspricht. Wenn Sie sich auf einem Nicht-Windows-System befinden, wird im Allgemeinen Popendarauf zugegriffen find. Wenn Sie sich jedoch unter Windows befinden, repliziert es sich findmit einem effizienten Dateisystem-Walker.

Der Code selbst verwendet keinen tryBlock… außer zur Bestimmung des Betriebssystems und damit zum "Unix" -Stil findoder zum Hand-Buillt find. Timing-Tests haben gezeigt, dass die tryErmittlung des Betriebssystems schneller war, daher habe ich dort eines verwendet (aber nirgendwo sonst).

>>> import pox
>>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False)
['/Users/mmckerns/.python']

Und das Dokument…

>>> print pox.find.__doc__
find(patterns[,root,recurse,type]); Get path to a file or directory

    patterns: name or partial name string of items to search for
    root: path string of top-level directory to search
    recurse: if True, recurse down from root directory
    type: item filter; one of {None, file, dir, link, socket, block, char}
    verbose: if True, be a little verbose about the search

    On some OS, recursion can be specified by recursion depth (an integer).
    patterns can be specified with basic pattern matching. Additionally,
    multiple patterns can be specified by splitting patterns with a ';'
    For example:
        >>> find('pox*', root='..')
        ['/Users/foo/pox/pox', '/Users/foo/pox/scripts/pox_launcher.py']

        >>> find('*shutils*;*init*')
        ['/Users/foo/pox/pox/shutils.py', '/Users/foo/pox/pox/__init__.py']

>>>

Die Implementierung finden Sie hier: https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190




Datum: 2017-12-04

Jede mögliche Lösung wurde in anderen Antworten aufgeführt.

Es gibt folgende Möglichkeiten, um zu prüfen, ob eine Datei existiert:

import os
os.path.isfile('~/file.md')    # Returns True if exists, else False
additionaly check a dir
os.path.isdir('~/folder') # Returns True if the folder exists, else False
check either a dir or a file
os.path.exists('~/file')

Ich habe ein ausführliches Cheatsheet als Referenz erstellt:

#os.path methods in exhaustive cheatsheet
{'definition': ['dirname',
               'basename',
               'abspath',
               'relpath',
               'commonpath',
               'normpath',
               'realpath'],
'operation': ['split', 'splitdrive', 'splitext',
               'join', 'normcase'],
'compare': ['samefile', 'sameopenfile', 'samestat'],
'condition': ['isdir',
              'isfile',
              'exists',
              'lexists'
              'islink',
              'isabs',
              'ismount',],
 'expand': ['expanduser',
            'expandvars'],
 'stat': ['getatime', 'getctime', 'getmtime',
          'getsize']}



Wie überprüfe ich, ob eine Datei vorhanden ist, ohne die try-Anweisung zu verwenden?

Im Jahr 2016 ist dies immer noch der einfachste Weg, um zu überprüfen, ob sowohl eine Datei vorhanden ist als auch, ob es sich um eine Datei handelt:

import os
os.path.isfile('./file.txt')    # Returns True if exists, else False

isfileist eigentlich nur eine Hilfsmethode, die intern verwendet wird os.statund stat.S_ISREG(mode)darunter liegt. Dies os.statist eine untergeordnete Methode, mit der Sie detaillierte Informationen zu Dateien, Verzeichnissen, Sockets, Puffern usw. erhalten. Mehr über os.stat hier

Hinweis: Bei diesem Ansatz wird die Datei jedoch in keiner Weise gesperrt . Daher kann Ihr Code anfällig für " Time of Check to Time of Use " ( TOCTTOU ) -Fehler sein .

Das Erhöhen von Ausnahmen ist daher ein akzeptabler und Pythonic-Ansatz für die Flusskontrolle in Ihrem Programm. Und man sollte in Betracht ziehen, fehlende Dateien mit IOErrors zu behandeln, und nicht mit ifAnweisungen ( nur ein Hinweis ).




Related