如何查找在文本文件和输出特定的线上面和下面的字符串

问题描述 投票:0回答:1

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

问:在文本文件和输出特定行查找字符串

而不打扰溶液与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
  • 获取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

© www.soinside.com 2019 - 2024. All rights reserved.