Ответ 1
Хотя это и не широко известно, str.endswith также принимает кортеж. Вам не нужно зацикливаться.
>>> 'test.mp3'.endswith(('.mp3', '.avi'))
True
Каков питонический способ написания следующего кода?
extensions = ['.mp3','.avi']
file_name = 'test.mp3'
for extension in extensions:
if file_name.endswith(extension):
#do stuff
У меня есть неопределенная память о том, что явное объявление цикла for
можно избежать и записать в условии if
. Это правда?
Хотя это и не широко известно, str.endswith также принимает кортеж. Вам не нужно зацикливаться.
>>> 'test.mp3'.endswith(('.mp3', '.avi'))
True
Просто используйте:
if file_name.endswith(tuple(extensions)):
Возьмите расширение из файла и посмотрите, находится ли он в наборе расширений:
>>> import os
>>> extensions = set(['.mp3','.avi'])
>>> file_name = 'test.mp3'
>>> extension = os.path.splitext(file_name)[1]
>>> extension in extensions
True
Использование набора, поскольку временная сложность поиска в наборах - это O (1) (docs).
У меня есть это:
def has_extension(filename, extension):
ext = "." + extension
if filename.endswith(ext):
return True
else:
return False