python 下面代码出现错误 求解决 if(result[1] == '00:52:59:00'): list index out of range

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()

result = row.split(',')
#print result
这行print result前面的注释去掉,看结果是什么。
list index out of range表明result[1]不存在, result可能为空或者只有一个元素。

如果确定代码没问题,可以在result = row.split('.')后加上一句
if len(result) < 2:
continue

或者把result[0] == '0000000'放在前面。
怎样改,依赖于你的数据和逻辑。追问

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格式。已经解决了。谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-15
result的值只有【0】,说明它要么是个字符串,要么就是单一值的列表。可能你需要对result的格式进行修改。追问

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
看看是哪行挂了

第2个回答  2012-06-16
查看 D:\\try\\tryalso.log 中有没有空行啊 格式错误的行什么的。
相似回答