繁体   English   中英

读取块中的文本文件并转换为 numpy 数组

[英]read text file in block and convert to numpy array

我正在尝试读取带有标签的文本文件,然后将其转换为 numpy 数组。 我的数据看起来像这样

<header1>
0, 4, 7, 9
1, 2, 6, 8
2, 5, 7, 0
<header1>
.
.
.
<header2>
0, 6, 2, 10, 10, 8
1, 22, 56, 18, 7, 9
2, 57, 79, 09, 10, 1
<header2>

我写了这样的东西来提取标题中的数据

def read(infile):
     with open('infile') as fp:
            for line in re.findall('<header1>(.*?)<header1>', fp.read(), re.S):
                print(line)

我的问题是如何将我所拥有的内容转换为如下所示的 numpy 数组:

[[ 0 4 7 9]
 [1 2 6 8 ]
 [2 5 7 0 ]]

不是最好的优化方式,但你可以尝试这样的事情

def read(infile):
     with open(infile) as fp:
            for line in re.findall('<header[0-9]>(.*?)<header[0-9]>', fp.read(), re.S):
                print(np.array([i.strip().split(', ') for i in line.split('\n') if i]) )
[['0' '4' '7' '9']
 ['1' '2' '6' '8']
 ['2' '5' '7' '0']]
[['0' '6' '2' '10' '10' '8']
 ['1' '22' '56' '18' '7' '9']
 ['2' '57' '79' '09' '10' '1']]

如果您可以收集“标题”之间的行块,则可以使用标准csv阅读器创建一个数组:

In [569]: txt="""0, 4, 7, 9
     ...: 1, 2, 6, 8
     ...: 2, 5, 7, 0""".splitlines()
In [570]: txt
Out[570]: ['0, 4, 7, 9', '1, 2, 6, 8', '2, 5, 7, 0']
In [571]: data = np.genfromtxt(txt, delimiter=',', dtype=int)
In [572]: data
Out[572]: 
array([[0, 4, 7, 9],
       [1, 2, 6, 8],
       [2, 5, 7, 0]])

genfromtxt有比这个案例需要的更多的花里胡哨,但它很容易使用。 在这里,我只是给它一个字符串列表。

或者简单地将行分解为可以转换为整数的字符串:

In [586]: [s.split(',') for s in txt]
Out[586]: [['0', ' 4', ' 7', ' 9'], ['1', ' 2', ' 6', ' 8'], ['2', ' 5', ' 7', ' 0']]
In [587]: np.array([s.split(',') for s in txt],int)
Out[587]: 
array([[0, 4, 7, 9],
       [1, 2, 6, 8],
       [2, 5, 7, 0]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM