将文本文件中的数字数组读入numpy数组 - python

时间:2018-04-27 21:51:16

标签: python arrays numpy

假设我有一个看起来像这样的文件

text a

bla bla

1 2 3   
4 5 6

text b

bla

7 8 9
10 11 12

text c

bla bla bla

13 14 15
16 17 18

我正在尝试仅提取数字数组并将它们放入numpy数组中:

array([[ 1, 2, 3,
         4, 5, 6,],
       [ 7, 8, 9,
         10, 11, 12],
       [ 13, 14, 15,
         16, 17, 18]])

我尝试使用np.genfromtxt('test.txt',usecols=[0,1,2],invalid_raise=False)

array([[  1.,   2.,   3.],
       [  4.,   5.,   6.],
       [  7.,   8.,   9.],
       [ 10.,  11.,  12.],
       [ nan,  nan,  nan],
       [ 13.,  14.,  15.],
       [ 16.,  17.,  18.]])

但它不会创建子数组并将文本转换为nans。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

您可以使用{/ 1}}

itertools.groupby

答案 1 :(得分:0)

你可能不得不诉诸一些"手册"解析。假设这里给出的形式是一个解决方案(当然还有其他解决方案):

import numpy as np

def parser(fname):
    with open(fname) as fh:
        for i, line in enumerate(fh):
            p = i % 7
            if p not in (5, 6):
                continue
            yield line.rstrip()

a = ' '.join(parser(filename))
arr = np.fromstring(a, dtype=int, sep=' ')
arr = arr.reshape((-1, 6))
print(arr)