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
...
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
...
Odpowiedzi:
Zakładając, że m
jest to ciąg, możesz użyć endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Aby nie rozróżniać wielkości liter i wyeliminować potencjalnie duży łańcuch else-if:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.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.
import os
filepaths = ["/folder/soundfile.mp3", "folder1/folder/soundfile.flac"]
for fp in filepaths:
# Split the extension from the path and normalise it to lowercase.
ext = os.path.splitext(fp)[-1].lower()
# Now we can simply use == to check for equality, no need for wildcards.
if ext == ".mp3":
print fp, "is an mp3!"
elif ext == ".flac":
print fp, "is a flac file!"
else:
print fp, "is an unknown file format."
Daje:
/folder/soundfile.mp3 to plik mp3! folder1 / folder / soundfile.flac to plik flac!
/.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 pliku
Spójrz na moduł fnmatch. To zrobi to, co próbujesz zrobić.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
jednym prostym sposobem może być:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
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!
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? )
import re
def checkext(fname):
if re.search('\.mp3$',fname,flags=re.IGNORECASE):
return('mp3')
if re.search('\.flac$',fname,flags=re.IGNORECASE):
return('flac')
return('skip')
flist = ['myfile.mp3', 'myfile.MP3','myfile.mP3','myfile.mp4','myfile.flack','myfile.FLAC',
'myfile.Mov','myfile.fLaC']
for f in flist:
print "{} ==> {}".format(f,checkext(f))
Wynik:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
import os
source = ['test_sound.flac','ts.mp3']
for files in source:
fileName,fileExtension = os.path.splitext(files)
print fileExtension # Print File Extensions
print fileName # It print file name
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
.
, na przykładsome.test.file.mp3
#!/usr/bin/python
import shutil, os
source = ['test_sound.flac','ts.mp3']
for files in source:
fileName,fileExtension = os.path.splitext(files)
if fileExtension==".flac" :
print 'This file is flac file %s' %files
elif fileExtension==".mp3":
print 'This file is mp3 file %s' %files
else:
print 'Format is not valid'
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('none of them')