Проверка на вхождение одной строки в другую
Есть переменная fc которая принимает значения: R:\TEST\TESTXLS.xlsx или R:\TEST\TESTXLS.xls для проверки расширения файла я использую
if 'xlsx' in fc:
при попытке использовать
if 'xlsx' or 'xls' in fc:
скрипт не срабатывает так как надо.
Как нужно написать чтобы правильно срабатывал ?
Ответы (1 шт):
Тут сразу несколько ошибок. Например, это выражение всегда истинно:
'xlsx' or 'xls' in fc => ('xlsx') or ('xls' in fc) => True or ('xls' in fc) => True
Т.е. правильный код должен быть такой:
if 'xlsx' in fc or 'xls' in fc:
^^^^^
Имя файла лучше выделять из полного пути, чтобы не было ложных срабатываний, если в пути попадётся такая же строка, делать это можно с помощью os.path.split, и после этого уже проверять только имя файла. Ну и ещё нужно переводить в нижний регистр перед сравнением с помощью функции lower(), потому что имя файла может быть в любом регистре.
Но лучше всего выделять сразу расширение файла, для этого тоже есть специальная функция os.path.splitext.
Пример кода:
import os
paths = ["R:\TEST\TESTXLS.xlsx", "R:\TEST\TESTXLS.XLS", "R:\TEST.xlsx\TESTXLS.bmp"]
extensions = [".xls", ".xlsx"]
for filename in paths:
head, ext = os.path.splitext(filename)
if ext.lower() in extensions:
print(filename)
Вывод:
R:\TEST\TESTXLS.xlsx
R:\TEST\TESTXLS.XLS