在Python中读取文件错误

时间:2014-07-04 09:21:26

标签: python

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

3 个答案:

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