Поиск конкретного слова и возврат определенных строк - PullRequest
0 голосов
/ 05 февраля 2019

Я получил помощь по приведенному ниже коду, но мне нужно знать, как заставить его делать это для всех матчей.

result = []
# 1. Search for the first failed entry:
with open('diskDetails.txt', 'r') as f:
    lines = f.readlines()
    for idx, line in enumerate(lines):
        if ': Failed' in line:
            result = lines[idx-3:idx+25]  # save lines from 'ID' to 'Sub Vendor'
            #break  # only the first match

# 2. Filter result:
keywords = ('ID', 'State', 'Capacity', 'Product ID', 'Serial No.')
result = list(filter(lambda l: str(l).startswith(keywords), result))

# 3. Save result:
with open('dataFinal.txt', 'wt') as f:
    f.writelines(result)

Так что, если я раскомментирую 'break', он показывает только первый (как указано) (вывод)

ID                              : 0:1:2
State                           : Failed
Capacity                        : 558.38 GB (599550590976 bytes)
Product ID                      : ST3600057SS
Serial No.                      : 6SL7YFWF

, а если я закомментирую, он показывает только совпадение послепервый.(вывод)

ID                              : 0:1:5
State                           : Failed
Capacity                        : 558.38 GB (599550590976 bytes)
Product ID                      : ST3600057SS
Serial No.                      : 6SLAWWHQ

Как мне получить все совпадения в файле (оба вывода указаны выше)?

образец diskDetails.txt.Файл может содержать 4-8 разделов, как показано ниже.Я не включил каждую строку каждого раздела (начиная с идентификатора), потому что каждый раздел имеет длину 28 строк.Предположим, что ключевые слова есть в каждом разделе.Кроме того, каждый раздел разделен пустой строкой (если это помогает).

ID                              : 0:1:0
Status                          : Ok
Name                            : Physical Disk 0:1:0
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               : No
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
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:1
Status                          : Ok
Name                            : Physical Disk 0:1:0
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               : No
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
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:2
Status                          : Critical
Name                            : Physical Disk 0:1:2
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               : No
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
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)

ID                              : 0:1:3
Status                          : Ok
Name                            : Physical Disk 0:1:3
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               : No
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
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:4
Status                          : Ok
Name                            : Physical Disk 0:1:4
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               : No
Revision                        : ES64
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:5
Status                          : Non-Critical
Name                            : Physical Disk 0:1:5
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
Mirror Set ID                   : Not Applicable
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:6
Status                          : Ok
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               : No
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
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

Как вывести и сохранить только те разделы, которые содержат «Сбой» и содержат только строки, содержащие ключевые слова каждого раздела?

Ответы [ 2 ]

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

Вы создали пустой список со строкой "result = []", это хорошо.

Вы переопределяете список "result" каждый проход через цикл for со строкой: result = lines [idx-3: idx + 25]

Вы хотите добавить в список "result" в цикле for что-то вроде: result.append (lines [idx-3: idx + 25])

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

Изменение # 1: добавление результатов в список.Перед повторным назначением в каждом цикле

if ': Failed' in line:
    result.append(lines[idx-3:idx+25])

Изменение № 2: Обновите нашу логику фильтра, чтобы выполнить цикл по результату, поскольку теперь это список списков

results = list(filter(lambda l: str(l).startswith(keywords), r) for r in result)

Изменение № 3: Зациклите результаты и запишите в файл

with open('dataFinal.txt', 'wt') as f:
    for result in results:
        f.writelines(result)

Надеюсь, это поможет!

...