需要计算每个intend下有多少个query,即计算Q开头的
intend之间有空行
不仅有I,Q,R,有些还有P
这是最后一个intend的样子
错误代码:
f = open('/home/xbwang/Desktop/cs_update','r')intend = 0for line in f: if(line[0] == 'I'): intend = intend+1f1 = open('/home/xbwang/Desktop/cs_update','r')line1 = f1.readline()count = [0]*30for i in range(intend): while line1: line1 = f1.readline()if(line1[0] == 'Q'): count[i] = count[i]+1 elif(line1[0] == 'I'): break else: continueprint count
报的错误:
正确代码:
f = open('/home/xbwang/Desktop/cs_update','r')intend = 0for line in f: if(line[0] == 'I'): intend = intend+1f1 = open('/home/xbwang/Desktop/cs_update','r')line1 = f1.readline()count = [0]*30for i in range(intend): while line1: line1 = f1.readline() if(len(line1) == 0): break else: if(line1[0] == 'Q'): count[i] = count[i]+1 elif(line1[0] == 'I'): break else: continueprint count
错误原因分析:当line1为最后一个空白时,while循环继续执行,这个时候再调用readline函数读下一行就是空了,这个时候调用line1[0]当然是数组越界,因为line1这时候为空。
另一个值得注意的错误:
错误代码:
f = open('/home/xbwang/Desktop/cs_update','r')intend = 0for line in f: if(line[0] == 'I'): intend = intend+1line1 = f.readline()print line1count = [0]*30#for i in range(intend): #while line1: #line1 = f1.readline() #if(line1[0] == 'Q'): #count[i] = count[i]+1 #elif(line1[0] == 'I'): #break #else: #continue#print count
错误:
可以看到这里的输出是一个空行
错误原因分析:
line1 = f.readline()这一行出现了错误,因为之前已经有了“for line in f:”这一行,即已经把整个文件读完,所以用line1 = f.readline()再读就是空了。这和readline函数一样,每读一次,少一行。避免此错误的方法就是再open这个文件进行读。