def readCapacityLog(fileName, lstHeaderMetric, lstLogResult):
f = open(fileName, "r")
lines = f.readlines()
f.close()
for row in lines:
result = row.split(',')
#print result
#print result[1]
if(result[1] == '00:52:59:00'):
lstHeaderMetric.append(result[2])
elif(result[0] == '0000000'):
lstLogResult.append(result[7])
break;
def main():
filename = r'D:\\try\\tryalso.log'
lstHeaderMetric = []
lstLogResult = []
readCapacityLog(filename, lstHeaderMetric, lstLogResult)
print lstHeaderMetric
print lstLogResult
if __name__ == '__main__':
main()
print result 结果是 类似这样结果的很多行
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000542',
'figuration Version: 5.0.4\n']
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000001',
'================================================\n']
改成这样好了:
for row in lines:
result = row.split(',')
#print result
#print result[1]
if len(result) =3):
lstHeaderMetric.append(result[2])
elif(result[0] == '0000000'):
if(len(result) >= 8):
lstLogResult.append(result[7])
break;
为什么原来的会报错a
追答因为原来的没有检查result的返回的元素数目。当result返回的元素数目没有达到n时, result[n-1]不存在,访问result[n-1]会出错。
追问可是每个result 的结果 肯定都是 大于 2 的阿 你看 我上边 粘的结果
追答老代码加上print result会print很多数据,最后index out of range吧?
把出错前print的最后一个result和错误一起贴出来。
['20120509', '00:52:59:00', 'DTCI-TSCANEN303', '10328', 'HK', 'INFO', '0000036',
'Running temp TCL \n']
Traceback (most recent call last):
main()
File "d:\used\flj\python\searchtxt.py", line 22, in main
File "d:\used\flj\python\searchtxt.py", line 11, in readCapacityLog
if(result[1] == '00:52:59:00'):
IndexError: list index out of range
从上面的错误信息看不出来问题。
贴一下tryalso.log (如果很长,精简一下,只要这个文件能让脚本出错就ok)
用上面给的
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000542','figuration Version: 5.0.4\n']
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000001','================================================\n']
就可以 不过这在日志里是两行,不是现在显示的四行
贴日志里的两行。日志里的应该是逗号间隔的csv格式吧。
追问是的,是CSV格式。已经解决了。谢谢!
print result 结果是 类似这样结果的很多行
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000542',
'figuration Version: 5.0.4\n']
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000001',
'================================================\n']
因为for是遍历循环,它在第二行找不到逗号,于是就只有一个值了。
追问遍历的时候不是应该一个[] 一个[] 的遍历吗 ,result应该是一个list吧
追答row in lines:这就是按行遍历了啊
追问但是我日志里
['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000542','figuration Version: 5.0.4\n']
这是1行的
那就是最后一行的问题了。。
追问最后一行,和之前的每区别阿,有什么问题['20120509','00:52:38:00', 'SCAN301', '1038', 'HK', 'INFO', '0000542','figuration Version: 5.0.4\n'] 和这个类似
追答那你就做个单元测试吧。
if len(result == 1):
print row
break
看看是哪行挂了