【问题标题】:Python read txt file as input: IndexError: list index out of range?Python 读取 txt 文件作为输入:IndexError: list index out of range?
【发布时间】:2012-08-02 03:22:14
【问题描述】:

这是我的代码:

if __name__ == '__main__':
  fid = open ('200502.txt')
  data = fid.readlines()
  data = map (string.strip, data)
  x = []
  y = [] 
  da = []
  for d in data:
    s = d.split()
    x.append(float(s[0])/10000.0)
    y.append(float(s[1])/10000.0)
    da.append(float(s[2]))

当我运行它时,我得到了:

Traceback (most recent call last):
  File "plot_data.py", line 286, in ?
    x.append(float(s[0])/10000.0)
IndexError: list index out of range

200502.txt (840kb) 文件是这样的:

1131087 224529 3.923   
1131096 224529 3.958 
1131106 224530 3.897    
1131116 224530 3.917   
1131126 224530 3.847 
(....)

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    这是加载数据的一种脆弱方式。我的猜测是它在文件末尾换行,或者类似的东西。无论如何,您应该使用numpy.loadtxt 加载文件(如果您无权访问numpy,则使用csv 模块)。

    让您开始:

    >>> import numpy
    >>> data = numpy.loadtxt('/tmp/200502.txt')
    >>> xs = data.T[0]/10000.
    >>> ys = data.T[1]/10000.
    >>> da = data.T[2]
    

    【讨论】:

    • 如果我们要处理风格问题,将每行中的 x、y 和数据值加载到单独的列表中是一个有问题的决定。对象、列表、元组或字典的列表似乎更明智。
    • @sr2222:很容易修复:x,y,da = np.loadtxt('200502.txt', unpack=True); x *= 1e-5; y *= 1e-5
    【解决方案2】:

    您的输入文件中至少有一个元素不包含数据。您正在迭代data,其中一个元素是从d.split() 生成一个长度为0 的列表。我还建议考虑将您的数据加载到更结构化的组织中。类似于loaded_data = [zip(('x', 'y', 'da'), d.split()) for d in data]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2018-02-08
      • 2014-10-20
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      相关资源
      最近更新 更多