我正在编写一个Python脚本,逐行读取输入文件,每个脚本包含20个值。我试图将第一个存储在一维数组中,另外19个存储在第二个数组中。
他们被定义为:
x = numpy.zeros((n_lines))
y = numpy.zeros((n_lines,19))
n_lines输入文件中的行数。 我正在阅读
for i,line in enumerate(open(infile)):
x[i],y[i] = line.split(' ')
但我遇到Too many values to unpack error
我现在通过将其存储在一个单个大型阵列中然后最终将其切割成两个来完成它。我没有使用line.split(' ')[0],line.split(' ')[1:]
,因为它看起来没有优化分割两次。
是否有一种整洁的(Pythonista)解包方式?
(如果重要,我会使用Python 2.7)
答案 0 :(得分:2)
你正在做最后一部分(创建一个数组然后切片),但第一部分应该使用numpy.genfromtxt()完成,如下所示:
big_array = numpy.genfromtxt(infile) ## probably with more arguments
x, y = numpy.split(big_array, [1])
如果需要更有效的解决方案,可以选择:
big_array = numpy.empty((nlines, 20))
for i,line in enumerate(open(infile)):
big_array[i,:] = line.split()
x, y = numpy.split(big_array, [1])
最后,直接从行解包到前x
和y
数组可以这样做:
splitted = line.split();
x[i], y[i,:] = splitted[0], splitted[1:]