为什么下面的“休息”之后停止代码?如果我“休息”后插入打印语句将打印(例如打印“完成了!”)。为什么不是“休息”后打开运行..?他们每个人都对自己的独立工作(作为单独的.py文件)。
diskDetails = open("diskDetails.txt", "r")
data = open("data.txt", "w")
searchlines = diskDetails.readlines()
for i, line in enumerate(searchlines):
if "Failed" in line:
for l in searchlines[i-3:i+25]: print >> data, l
print
break
with open('data.txt') as infile, open('dataFinal.txt', 'w') as outfile:
for line in infile:
if line.startswith(("ID", "State", "Capacity", "Product ID", "----")):
outfile.write(line)
该dataFinal.txt文件是空白的,所以它出现在“休息”之后停止。没有“休息”只停留在“如果”循环?它为什么会做一个打印“完成!”但不是“开放(” data.txt中')....一部分?
diskDetails.txt包含多个记录,每个记录是27条线长(我已经缩短了此示例):
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
代码的第一部分得到认定失败包含已“失败”的记录(并返回上面的2行第(i-3)和下面的25(1 + 25)并将其输出到一个命名为“data.txt中”文件。
代码的第二部分(与开放......)采用的是的data.txt文件,查找特定行(含ID,状态,能力等),并打印到一个名为dataFinal.txt文件
cat dataFinal.txt
ID : 0:1:6
State : Failed
Capacity : 558.38 GB (599550590976 bytes)
Product ID : ST3600057SS
这些码的两个部分正常工作独立地为(如上所示)。我怎样才能让他们在同一个.py文件一起工作?谢谢!
好了,最后我打破了你的代码分为三个部分:
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+12] # save lines from 'ID' to 'Certified'
break # only the first match
# 2. Filter result:
keywords = ('ID', 'State', 'Capacity', 'Product ID')
result = list(filter(lambda l: str(l).startswith(keywords), result))
# 3. Save result:
with open('dataFinal.txt', 'wt') as f:
f.writelines(result)
# $ cat dataFinal.txt
# ID : 0:1:6
# State : Failed