Pracuję nad pewnym programem, w którym muszę robić różne rzeczy w zależności od rozszerzenia pliku. Czy mogę po prostu tego użyć?
if m == *.mp3
...
elif m == *.flac
...
python
file-extension
wkoomson
źródło
źródło
Odpowiedzi:
Zakładając, że
m
jest to ciąg, możesz użyćendswith
:Aby nie rozróżniać wielkości liter i wyeliminować potencjalnie duży łańcuch else-if:
źródło
.split('.')[-1]
? A może rpartition to naprawdę wysoka wydajność?os.path
udostępnia wiele funkcji do manipulowania ścieżkami / nazwami plików. ( dokumenty )os.path.splitext
pobiera ścieżkę i oddziela rozszerzenie pliku od jej końca.Daje:
źródło
/.mp3
nie jest uważana za plik mp3. W ten sposób należy jednak traktować przestrzeń wiodącą. Np..gitignore
Nie jest to format plikuUżyj
pathlib
od Python 3.4.źródło
Spójrz na moduł fnmatch. To zrobi to, co próbujesz zrobić.
źródło
jednym prostym sposobem może być:
os.path.splitext(file)
zwróci krotkę z dwiema wartościami (nazwa pliku bez rozszerzenia + tylko rozszerzenie). Drugi indeks ([1]) da więc tylko rozszerzenie. Fajne jest to, że w ten sposób w razie potrzeby możesz również łatwo uzyskać dostęp do nazwy pliku!źródło
a może:
źródło
Stary wątek, ale może pomóc przyszłym czytelnikom ...
Chciałbym uniknąć stosując .lower () na nazwy plików, jeśli nie z innego powodu, niż uczynić kod bardziej niezależne od platformy. (linux jest przypadek wyczulona, .lower () w pliku na pewno uszkodzona logika ostatecznie ... lub, co gorsza, ważnym pliku!)
Dlaczego nie użyć ponownie ? (Chociaż aby być jeszcze bardziej niezawodnym, powinieneś sprawdzić magiczny nagłówek każdego pliku ... Jak sprawdzić typ plików bez rozszerzeń w Pythonie? )
Wynik:
źródło
źródło
źródło
.
, na przykładsome.test.file.mp3
źródło
źródło