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