我是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:列表索引超出范围
这应该是一个简单的问题需要解决,而且我一直试图多次更改列数和数据类型,但它仍然无法正常工作。
答案 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)