как проверить тип файла с помощью функции (def) в python

#python #python-3.x #encoding #user-defined-types

#python #python-3.x #кодирование #определяемые пользователем типы

Вопрос:

 def is_image(fname):
    for files in files_in_dir('./W06'):
        if files[-3] =='jpg':
            return True
        return False
x = is_image('.jpg')
print(x)
  

Интересно, что я сделал не так в этой части, когда я запускаю код, он всегда говорит false, предполагается, что true, если последняя буква 3 — jpg. пожалуйста, помогите мне, я новичок в Python

Комментарии:

1. Попробуйте files[-3:]

2. Или более читабельно, if files.endswith('.jpg')

3. Вы не используете fname в своей функции.

Ответ №1:

Наиболее очевидная ошибка заключается в том, что вы проверили индекс, -3 а не фрагмент -3: . Обратите внимание на разницу:

 >>> "abc.def"[-3]
'd'
>>> "abc.def"[-3:]
'def'
>>>
  

Помимо этого, общий метод кажется немного неуклюжим. У вас есть fname в качестве параметра, но на самом деле вы его не используете. Вы также проверяете наличие любого файла в каталоге с этим расширением. Далее, если вы хотите проверить наличие предиката в списке, вы можете использовать any метод.

Я бы порекомендовал что-то вроде этого:

 def dir_contains_ext(dir, ext):
    return any(
        files.endswith(ext)
        for file in files_in_dir(dir)
    )


dir_contains_ext('./W06', '.jpg')