有没有办法使用np.loadtxt和converter参数将列拆分成两列?
我的文本文件中的行如下所示:
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)
谢谢!
答案 0 :(得分: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指出的那样。