如何在文本文件中查找字符串并在上方和下方输出特定行

时间:2019-02-02 19:11:19

标签: python search printing

我无法找到我的具体问题的解决方案,所以我创建一个新的问题。我怎样才能找到一个文件中的字符串,并将它从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

下面是该文件内容的一个例子。我需要搜索“失败”,然后从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 :(得分:0)

  

问题:文本文件中的查找字符串并输出特定行

解决方案,使用固定行数和indices对象来dict

  

缺点:您正在失去订单!如果这是importand,请改用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
    
  • 获取每一行的keyvalue对,并将其分配给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