我是python的新手,想要处理一个包含6列和多行的数据文件。从文本文件中读取数据时遇到了一些问题。我能够读取前三列,但对于第4列,此错误会弹出-IndexError: list index out of range
。当我的文件中有6列时,为什么会出现此错误。它可以读取前三个而不是更多吗?
f = open('forceCoeffs.dat', 'r')
for line in f:
data = line.split()
frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] }
print frc['time'], frc['Cm'], frc['Cd'], frc['Cl']
f.close()
答案 0 :(得分:0)
我认为你的一行有少于6列。 然后line.split()不会生成包含所需元素数的列表。
我的建议:
添加“打印行”,以便您可以查看错误发生在哪一行。 添加'print len(data)',这样您就可以看到您的行中有多少列。
for line in f:
print line
data = line.split()
print len(data)
frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] }
print frc['time'], frc['Cm'], frc['Cd'], frc['Cl']
如果没有运气,请发布有关错误和文件内容等的更多详细信息。
答案 1 :(得分:0)
您正尝试通过数据[3]访问第4列,但有些行可能没有第4列的任何数据,因此它会使错误列表索引超出范围。 请尝试以下代码:
f = open('forceCoeffs.dat', 'r')
for line in f:
data = line.split()
frc={'time':data[0] if data[0] else '', 'Cm':data[1] if data[1] else '', 'Cd':data[2] if data[2] else '', 'Cl':data[3] if data[3] else '' }
print frc['time'], frc['Cm'], frc['Cd'], frc['Cl']
f.close()
答案 2 :(得分:0)
最有可能的情况是,并非所有数据文件行都与您期望的完全相同。这可能是一些空白行。最简单的方法是捕获异常并继续。这会忽略坏线。
f = open('forceCoeffs.dat', 'r')
for line in f:
data = line.split()
try:
frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] }
except IndexError:
continue
print frc['time'], frc['Cm'], frc['Cd'], frc['Cl']
f.close()