Я создал файл, содержащий строки, которые вы искали, и провел некоторое тестирование, и ваш пример должен был дать вам некоторый вывод, хотя и неверный.Это заставило меня задуматься о том, что вы не совсем разбираетесь в скриптах на python, но поправьте меня, если я ошибаюсь.
Чтобы ваша функция была выполнена, вам нужно вызвать ее.Запись def
просто определяет это.Вы можете узнать больше об этом здесь .
Я вижу, что вы ищете для этого регулярное выражение, но если в искомой строке нет изменений, вы можете просто использовать find function.
Дело в том, что line.find()
возвращает целое число, а не логическое значение.Таким образом, вы всегда вводите первый оператор if, если только ваша строка не начинается с '0/RP1/CPU0 RP(Active)'
(так как тогда он будет возвращать индекс 0).Если мы проверим документацию , то увидим, что функция find возвращает -1, если строка не найдена.Таким образом, вы можете изменить выражение if следующим образом: line.find('0/RP1/CPU0 RP(Active)') != -1
.То же самое можно сделать с многострочными строками.Единственное, что вам нужно выгрузить весь файл в строку.Поэтому, имея в виду, это решение может решить проблему.
def check_active_rp(activerp):
whole_file = activerp.read()
if whole_file.find('0/RP1/CPU0 RP(Active)') != -1:
print("execute command location 0/rp1/cpu0")
elif whole_file.find('0/RP0/CPU0 RP(Active)') != -1:
print("execute command location 0/rp0/cpu0")
if whole_file.find('INFO_LINE------------------: TITLE_LINE(A-Z)\n State : ENABLED') != -1:
print('state is ENABLED')
elif whole_file.find('INFO_LINE------------------: TITLE_LINE(A-Z)\n State : DISABLE') != -1:
print('restart process on location (FROM SEARCH1)')
with open('sample-output.txt') as active_rp:
check_active_rp(active_rp)
В вашем примере вы также никогда не закрываете файл, поэтому я использовал оператор с , который считается хорошимпопрактиковаться при работе с IO.
ОБНОВЛЕНИЕ:
Я только что понял, что вы хотели бы изменить то, что написано в информационной строке, в этом случае использование регулярного выраженияподходящее.Тогда будет работать следующее решение:
import re
def check_active_rp(activerp):
iterator = iter(activerp)
for line in iterator:
if line.find('0/RP1/CPU0 RP(Active)') != -1:
print("execute command location 0/rp1/cpu0")
elif line.find('0/RP0/CPU0 RP(Active)') != -1:
print("execute command location 0/rp0/cpu0")
pattern = re.compile('INFO_LINE------------------: ([A-Z]+)')
x = pattern.search(line)
if x:
line = next(iterator)
if line.find('ENABLED') != -1:
print('the {} is ENABLED'.format(x.group(1)))
elif line.find('DISABLE') != -1:
print('the {} is DISABLED'.format(x.group(1)))
Итак, мы создаем итератор из файла и начинаем построчно проходить по файлу.Мы все еще используем функцию поиска строки для поиска первой строки.Теперь мы переходим к ИНФОРМАЦИОННОЙ ЛИНИИ.Используя пакет регулярных выражений, мы скомпилируем регулярное выражение, которое бы захватывало TITLE_LINE.Как только это будет найдено, мы получаем следующую строку от итератора и еще раз проверяем, содержит ли строка ENABLED или DISABLE;и напечатайте соответственно.