2017-06-30 2 views
1

Ich habe ein Verzeichnis, das wie folgt aussieht:Python os.path.exists() ignorieren Teil von file name

> myDirectory 
    > L1.zip 
    > L2_abc.zip 

Ich möchte durch das Verzeichnis suchen zurückzukehren, wenn eine Datei vorhanden ist, aber ich werde habe nur den ersten Teil des ZIP-Dateinamens (L1 oder L2). Wie würde ich prüfen, ob die Datei existiert?

Die Ergebnisse sollten ein wenig wie folgt aussehen:

>>> file_exists("L1") 
true 
>>> file_exists("L2") 
true 

Ich bin derzeit nur os.path.exists(), aber ich weiß nicht, wie die _abc Teil des Dateinamens zu ignorieren.

+0

['glob.glob'] (https://docs.python.org/3/library/glob.html#glob.glob). – vaultah

+0

Möchten Sie 'True' nur dann zurückgeben, wenn' L1.zip' existiert oder eine Datei, die mit L1 beginnt, wie zum Beispiel 'L1.txt'? – Mureinik

+0

@Mureinik Alle Dateien sind in Ordnung, danke. – JoeFromAccounting

Antwort

2

Sie können listdir verwenden und eine benutzerdefinierte Prüfung durchführen. Hier ist eine Möglichkeit, die nur übereinstimmt, wenn die Datei/dir mit L2 beginnt

matches = [f for f in os.listdir() if f.startswith("L2")] 
print(matches) 
+0

mein Suchparameter ist eigentlich eine ziemlich lange ID. Danke für die Lösung; es vermeidet auch einen anderen Import. "glob" kann in verschiedenen Fällen nützlich sein. – JoeFromAccounting

1

Mit glob, und prüfen, ob das Ergebnis Ausgabe leer ist oder nicht sollte es tun:

from glob import glob 

def file_exists(filename): 
    return bool(glob(filename + '.*')) 
+1

Sie verwenden in Ihrem Beispiel nicht glob. – Daniel

+1

@Daniel arg! habe den wichtigsten Teil vergessen! Bearbeitet und repariert, danke für's Bemerken. – Mureinik

0

Sie pathlib verwenden könnten :

from pathlib import Path 

def file_exists(prefix): 
    return any(Path("myDirectory").glob(prefix + "*")) 
Verwandte Themen