Я пишу несколько операторов, используя регулярные выражения, чтобы сопоставить вывод с заданным расширением. Мой цикл For работает нормально, я получаю ответ для каждого из файлов, и если я удаляю или добавляю один, я получаю возврат. Что, похоже, происходит, так это то, что мой первый файл подобран, успешно сопоставлен и выдан правильный вывод. Затем цикл захватывает следующий файл, сверяется с первым оператором, затем пропускает два ELIF и дает и выводит на основе моего ELSE. Может ли кто-нибудь указать, почему или, если я ошибаюсь, что на самом деле происходит?
def extmatch():
global dircontents
for file in dircontents:
dircontents = re.search(".+\sbreakout.*\.ttx", file)
if dircontents:
print('File is for TIA')
elif dircontents:
dircontents = re.search('\w+\.csv+$', file)
if dircontents:
print('File is for NMFTA')
elif dircontents:
dircontents = re.search('\w+.\.txt+$', file)
if dircontents:
print('File is for NMFTA')
else:
print('File type not recognized.')
['061419license breakout_ibc_v3_0116.ttx', '2019-06-17_7-49-21.jpg', 'SampleCSV.csv', 'script_test.txt'] <--- это файлы в указанном каталоге
File is for TIA
File type not recognized. <---Seems to match to ELSE for each file past the first
File type not recognized.
File type not recognized.
Ваше условие для if и обоих elif просто dircontents, поэтому все они имеют одинаковое истинностное значение. Вам нужно иметь результат re.search() в качестве условия, если я не ошибаюсь.
Вы меняете dircontents, перебирая его. Не делай этого. Используйте разные переменные.





Вы, вероятно, хотите что-то вроде этого:
def extmatch(dircontents):
for filename in dircontents:
if filename.lower().endswith(".ttx"):
print('File is for TIA')
elif filename.lower().endswith(".csv"):
print('File is for NMFTA')
elif filename.lower().endswith(".txt"):
print('File is for NMFTA')
else:
print('File type not recognized.')
или даже так:
EXT_ASSIGNMENTS = {
'ttx': 'TIA',
'csv': 'NMFTA',
'txt': 'NMFTA',
}
def extmatch(dircontents):
for filename in dircontents:
ext = filename.lower().split('.')[-1]
if ext in EXT_ASSIGNMENTS:
print('File is for ' + EXT_ASSIGNMENTS[ext])
else:
print('File type not recognized.')
Избегайте глобальных переменных. Если вам нужно передать информацию функции, используйте аргумент.
Это определенно сработало, можете ли вы сказать мне, где я ошибся?
Пропустил их как-то, я квадрат. ТЮ
Не прямой ответ, но этот код не имеет особого смысла. Если первая проверка
if dircontentsне пройдена, то же самое произойдет и со всеми остальными, которые последуют за ней, и будет введенelse.