Korrekt auf File ist verfügbar testen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Liebes Forum
Wie teste ich korrekt darauf, ob sich ein bestimmtes File schon auf dem System befindet. Wenn ja, fortsetzen, wenn nein runterladen. Ich hab gelesen, es empfielt sich das mittels try / except to realisieren:

Code: Alles auswählen

def do_function(target):
    try:
        open('../files/' + target + '.ext')
    except IOError as e:
        download(target)

def download(target):
    data = urllib.urlopen('www.data.com/' + target + '.ext')
Macht das ungefähr Sinn so?
[url=http://www.proandkon.com]proandkon.com[/url]
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

`os.path.exists(filename)`. Außerdem solltest du zum Dateipfade-Zusammenfügen `os.path.join` verwenden.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nicht vergessen die Datei zu schliessen. Auf CPython funktioniert das vllt noch aber auf allen anderen bleibt die Datei erstmal ne ganze Weile offen.

Mit dem `open` überprüfst du auch, ob du die Datei lesen kannst, das ist je nachdem was du erreichen willst also nicht unbedingt gleichwertig zu `exists`.
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Ich sehe.
Wieso ist es besser das mittels try/except zu machen, anstelle einfach if/else zu bemühen?
[url=http://www.proandkon.com]proandkon.com[/url]
senft
User
Beiträge: 25
Registriert: Montag 31. März 2008, 14:47

Das hängt ganz davon ab, was genau du realisieren möchtest.
Verwendest du ein try/catch und fängst einen IOError ab, heißt das entweder, dass die Datei nicht existiert, oder du keine Lese/Schreibrechte hast.
Wenn es dir egal ist, ob du die nötigen Rechte hast, sollte ein einfaches `exists` reichen.
Antworten