这是我的程序
#!/usr/bin/python
import sys
fn=sys.argv[1]
dt=open(fn).readlines()
for ln in dt:
fd=ln.split()
cntw=fd[1].count("W")
print cntw
它完全读取文件,但最后给出错误:
Traceback (most recent call last):
File "./task0.py", line 7, in <module>
cntw=fd[1].count("W")
IndexError: list index out of range
为什么这个以及我需要改变什么?
答案 0 :(得分:2)
你的最后一行是空的,跳过它:
for ln in dt:
fd = ln.split()
if not fd:
continue
空行会产生一个空列表:
>>> ''.split()
[]
并且not fd
测试适用于空容器。
请注意,您不必先将所有行读入内存;删除readlines()
调用并直接遍历打开的文件对象;使用with
语句让Python在完成后自动关闭它:
with open(fn) as fileobj:
for ln in fileobj:
fd = ln.split()
if not fd:
continue
cntw = fd[1].count("W")
print cntw
答案 1 :(得分:1)
该文件的内容有助于理解您要完成的任务,但这是一个更Pythonic的解决方案。您应该使用try和except语句来捕获异常并使用with关键字(如Martijn Pieters建议的那样)在完成后自动关闭文件。
此外,这不是20世纪90年代......我建议使用变量名来了解它们的用途。我不知道你要做什么,但我做了一些改变,试图明白这一点:)
#!/usr/bin/python
import sys
filename = sys.argv[1]
with open(filename) as datafile:
for line in datafile:
words = line.split()
try:
wcount = words[1].count("W")
except IndexError:
continue