Я работаю над определенной программой, где мне нужно делать разные вещи в зависимости от расширения файла. Могу ли я просто использовать это?
if m == *.mp3
...
elif m == *.flac
...
Я работаю над определенной программой, где мне нужно делать разные вещи в зависимости от расширения файла. Могу ли я просто использовать это?
if m == *.mp3
...
elif m == *.flac
...
Предполагая, что m
является строкой, вы можете использовать endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Чтобы не учитывать регистр и исключить потенциально большую цепочку else-if:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
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!
Посмотрите модуль fnmatch. Это сделает то, что вы пытаетесь сделать.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
или, возможно:
from glob import glob
...
for files in glob('path/*.mp3'):
do something
for files in glob('path/*.flac'):
do something else
одним простым способом может быть:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
вернет кортеж с двумя значениями (имя файла без расширения + только расширение). Второй индекс ([1]) для этого даст вам просто расширение. Самое приятное, что таким образом вы также можете легко получить доступ к имени файла, если это необходимо!
Используйте pathlib
Начиная с Python3.4.
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
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"
Старый поток, но может помочь будущим читателям...
Я бы избегал, используя .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
#!/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'
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')