Как найти строку в текстовом файле и вывести конкретные строки сверху и снизу - PullRequest
0 голосов
/ 02 февраля 2019

Мне не удалось найти решение для моей конкретной проблемы, поэтому я создаю новый вопрос.Как найти строку в файле и вывести ее из 3 строк выше и 25 строк ниже?У меня пока что ниже, но я могу напечатать только 25 ниже соответствия.

with open("driveDetails.txt", "r") as f:
    searchlines = f.readlines()
for i, line in enumerate(searchlines):
    if "Failed" in line:
        for l in searchlines[i:i+25]: print l,
        print
        break

Ниже приведен пример содержимого файла.Мне нужно найти «Failed», а затем распечатать из 3 строк (ID: 0: 1: 6), а затем + 25. Я не перечислил все строки для каждой записи, поэтому я просто поставил ...

ID                              : 0:1:1
Status                          : Non-Critical
Name                            : Physical Disk 0:1:6
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : Yes
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Product ID                      : HDSG02032923
Serial No.                      : 7DK30358
...

ID                              : 0:1:6
Status                          : Non-Critical
Name                            : Physical Disk 0:1:6
State                           : Failed
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : Yes
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Product ID                      : HDSG09393329
Serial No.                      : 7DK3035B
... 

1 Ответ

0 голосов
/ 02 февраля 2019

Вопрос : строка поиска в текстовом файле и вывод определенных строк

Решение без беспокоиться о indices с использованием исправлено количество строк и dict объект.

Недостаток : Вы теряете порядок строк!Если это важно, используйте вместо этого OrderedDict.

  • Открыть файл и выполнить цикл по строкам

    with io.StringIO(DATA) as data_in:
        while True:
    
  • Определить dict и прочитать одну запись с n строками.

            record = {}
            for _ in range(20):
                try:
                    line = next(data_in).rstrip()
                except StopIteration:
                    break
    
  • Получите пару key, value каждой строки и назначьте ее для dict.

                key, value = line.split(' : ')
                record.setdefault(key.strip(' '), value.strip(' '))
    
  • Проверьте полученный результат record.Если клавиша 'State' == 'Failed' делает с этим record все, что вы хотите.

            if not record:
                break
            elif 'State' in record:
                if record['State'] == 'Failed':
                    print('{}'.format(record))
            else:
                print('ERROR:{}'.format(record))
    

Выход :

{'Serial No.': '7DK3035B', 'State': 'Failed', 'ID': '0:1:6', ... (omitted for brevity)

Протестировано на Python: 3.4.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...