Как я могу проверить расширение файла?
Я работаю над определенной программой, где мне нужно делать разные вещи в зависимости от расширения файла. Могу ли я просто использовать это?
if m == *.mp3
...
elif m == *.flac
...
Ответы
Ответ 1
Предполагая, что m
является строкой, вы можете использовать endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Чтобы не учитывать регистр и исключить потенциально большую цепочку else-if:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
Ответ 2
os.path
предоставляет множество функций для управления путями/именами файлов. (docs)
os.path.splitext
принимает путь и разделяет расширение файла с его конца.
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."
Дает:
/folder/soundfile.mp3 is an mp3!
folder1/folder/soundfile.flac is a flac file!
Ответ 3
Посмотрите модуль fnmatch. Это сделает то, что вы пытаетесь сделать.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
Ответ 4
или, возможно:
from glob import glob
...
for files in glob('path/*.mp3'):
do something
for files in glob('path/*.flac'):
do something else
Ответ 5
одним простым способом может быть:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
вернет кортеж с двумя значениями (имя файла без расширения + только расширение). Второй индекс ([1]) для этого даст вам просто расширение. Самое приятное, что таким образом вы также можете легко получить доступ к имени файла, если это необходимо!
Ответ 6
Используйте pathlib
Начиная с Python3.4.
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
Ответ 7
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
Ответ 8
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
Ответ 9
Старый поток, но может помочь будущим читателям...
Я бы избегал, используя .lower() в именах файлов, если только для того, чтобы сделать ваш код более независимым от платформы. (linux есть с сенсорным, .lower() в имени файла наверняка испортит вашу логику в конце концов... или, что еще хуже, важный файл!)
Почему бы не использовать re? (Хотя, чтобы быть еще более надежным, вы должны проверить заголовок магического файла для каждого файла...
Как проверить тип файлов без расширений в python?)
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))
Вывод:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
Ответ 10
#!/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'
Ответ 11
import pandas as pd
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('non of them')