2014-04-02 2 views
18

Sto provando a rilevare i file con un elenco di estensioni.Utilizzare endswith con più estensioni

ext = [".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv"] 
if file.endswith(ext): # how to use the list ? 
    command 1 
elif file.endswith(""): # it should be a folder 
    command 2 
elif file.endswith(".other"): # not a video, not a folder 
    command 3 
+1

'file.endswith ("")' è sempre 'true', così il vostro' elif' probabilmente doesn' fai quello che pensi ' "" non nel file' potrebbe essere più vicino. – kindall

+0

Sì, dovrebbe essere una cartella. Quindi devo andare in questa cartella per ottenere il file. (Ho modificato la domanda per essere più esplicita) – Guillaume

+0

Puoi usare 'os.path.splitext (filename)' per togliere l'estensione da 'filename': https://docs.python.org/2/library/os .path.html # os.path.splitext – Don

risposta

51

Utilizzare una tupla per questo.

>>> ext = [".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv"] 

>>> ".wmv".endswith(tuple(ext)) 
True 
>>> ".rand".endswith(tuple(ext)) 
False 

Invece di convertire ogni volta, solo convertirlo in tuple volta.

4

Non potreste aver appena fatto una tupla in primo luogo? Perché quello che dovete fare:

>>> ".wmv".endswith(tuple(ext)) 

Impossibile basta fare:

>>> ext = (".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv")