|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位好,我在学习中又遇到了小问题:
先放代码:- f=open('Test.log')
- while True:
- line=f.readline()
- line1=line.strip('\n')
- z=line1.split(',')
- s=z[3].split('=')
- if line1!="":
- if s[1]=='10':
- print(z)
复制代码 Test.log中的内容如下:
Symbol=HMST.NQ,Type=0,Price=28.22700,Size=10
Symbol=ALBO.NQ,Type=0,Price=34.89000,Size=10
Symbol=AAON.NQ,Type=0,Price=45.65000,Size=10
Symbol=RUSHA.NQ,Type=0,Price=43.78000,Size=100
Symbol=POWI.NQ,Type=0,Price=74.41000,Size=14
Symbol=LQDA.NQ,Type=0,Price=11.30000,Size=10
Symbol=DGICA.NQ,Type=0,Price=13.26000,Size=1
Symbol=SHEN.NQ,Type=0,Price=43.73000,Size=10
Symbol=BOCH.NQ,Type=0,Price=10.93000,Size=8
Symbol=SHEN.NQ,Type=0,Price=43.19000,Size=10
Symbol=ATRC.NQ,Type=0,Price=28.09000,Size=10
Symbol=PCB.NQ,Type=0,Price=18.16000,Size=4
Symbol=KVHI.NQ,Type=0,Price=10.42000,Size=10
程序目的:
把test中的log读出来,然后只打出size=10的条目。现在的代码能够实现这个功能,但是会报错,报错内容如下:
Traceback (most recent call last):
File "C:\Users\WENrui\Desktop\Python\hello2.py", line 6, in <module>
s=z[3].split('=')
IndexError: list index out of range
我去查了报错原因,说是循环结束后文本存在空值,导致list index索引不到,这个空值可能是readline读取后每行末尾的换行符'\n'引起的,所以我在readline以后用了strip去掉换行符,但是依然会报错,请问这个错误应该怎么修正?
我试过在if判断语句之前print(z),不会报错,所以我觉得错误很可能出现在if判断语句这部分,能麻烦帮忙看看是哪里出错了吗?
- if line1!="":
- if s[1]=='10':
- print(z)
复制代码
本帖最后由 cwhsmile 于 2019-4-15 00:01 编辑
问题不在判断条件,
错误信息的第三行指出了错误的原因,但这是治标不治本的原因,(错误提示的是:超出索引范围)。
你需要一层一层的往上推倒。
本质原因是你循环设置的不对,当f.readline()把所有的行都读取完以后并没有停止退出循环,
所以f.readline()还在不停的执行,由于文件已经没有内容了,所以f,readline()读取到的就是'\n'或者''
然后就导致s=z[3].split('=')出错,因为z已经变成了空列表,没有编号为3的元素。
解决办法有一个,用f.readlines()把文件按照行读取返回列表,用for循环迭代。
|
|