2

有没有办法使用 np.loadtxt 和转换器参数将一列分成两列?

我的文本文件中的行如下所示:

1 2 A=3;B=4

我想把它读成:

[1,2,3,4]

该文件非常大,因此逐行读取会太慢。

我试过这个:

parse_col = lambda x: [ float(x.split(';')[0].split('=')[1]), int(x.split(';')[1].split('=')[1]) ]

np.loadtxt('demo.txt',usecols=[0,1,2],comments='#',converters={2:parse_col},dtype=int)

谢谢!

4

1 回答 1

1

您可以创建一个调用解析器的生成器并将其传递给np.genfromtxt

import re

import numpy as np

def parser(s):
    for i in re.findall('[a-zA-Z]+', s):
        s = s.replace(i, '')
    return s.replace('=', '').replace(';',' ')

gen = (parser(line) for line in open('demo.txt'))
np.genfromtxt(gen, comments='#', usecols=(0, 1, 2, 3))

请注意re.findall,正如@PadraicCunningham 所指出的,我曾经识别和替换更通用的模式。

于 2014-10-17T22:01:14.227 回答