使用np.loadtxt读取时分割列

2 投票
1 回答
587 浏览
提问于 2025-04-28 04:57

有没有办法使用np.loadtxt和converters参数把一列数据分成两列呢?

我文本文件里的每一行看起来是这样的:

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)

谢谢!

暂无标签

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 指出的那样。

撰写回答