numpy loadtxt IndexError:列表索引超出范围

时间:2015-06-14 16:07:36

标签: python numpy text

我是Python的新手,目前我有一个文本文件,如下所示:

# Wed 13:10:08 11-Mar-2015
 begin  aperture image1 1 1024. 139.7445
 image  image1
 aperture   1
 beam   1
 center 1024. 139.7445
 low        -1023. -4.
 high   1024. 4.
 background
         xmin -40.45428
         xmax 43.75221
         function chebyshev
         order 3
         sample -40.45428:-18.42313 20.09063:43.75221
         naverage 1
         niterate 0
         low_reject 3.
         high_reject 3.
         grow 0.
 axis    2
 curve   6
         2.
         2.
         4.
         2044.
         -0.1275881
         -0.03320996 

我想提取' 139.7445'从第六行开始('中心')。这是我的代码:

pos_wasp = np.loadtxt(line, skiprows=5, usecols=(3,4), unpack=True)

但是当我运行它时,它会出错:

  

IndexError:列表索引超出范围

这应该是一个简单的问题需要解决,而且我一直试图多次更改列数和数据类型,但它仍然无法正常工作。

4 个答案:

答案 0 :(得分:2)

如果您在使用IndexError: list index out of range后对numpy.loadtxt感到沮丧而到达此页面,请不要绝望。

此失败的原因是输入文本文件中的一行或多行不包含usecols=()中指定的列。

要更正错误,请检查文本文件中的所有行是否包含您要提取的列。

答案 1 :(得分:1)

我认为您的代码失败了,因为loadtxt想要在您的值开启之后读取所有行。要获得这一个值,为什么不直接读取文件(inpp.txt或其他任何名称):

with open('inpp.txt') as fi:
    for line in fi:
        fields = line.split()
        if fields[0] == 'center':
            val = float(fields[2])
            break

print(val)

答案 2 :(得分:0)

文本文件末尾是否有新行?如果是这样,摆脱它,看看是否有效。

答案 3 :(得分:0)

我认为您的代码失败了,因为loadtxt想要在您的值开启之后读取所有行。你可以跳过@nymk建议的genfromtxt页脚,但是为了得到这个值,为什么不直接读取文件:

with open('inpp.txt') as fi:
    for line in fi:
        fields = line.split()
        if fields[0] == 'center':
            val = float(fields[2])
            break

print(val)