Python 读取时使用np.loadtxt拆分列

Python 读取时使用np.loadtxt拆分列,python,file-io,numpy,text-files,converters,Python,File Io,Numpy,Text Files,Converters,有没有办法使用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],c

有没有办法使用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)

谢谢

您可以创建一个调用解析器的生成器,并将其传递给
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
来识别和替换一个更通用的模式,正如@padraiccnningham所指出的那样。

这将仅适用于a和B,而这可能并不是file@PadraicCunningham你是对的。。。我使用
re.findall()
更新了答案,使用了更通用的pattern@SaulloCastro谢谢有两个问题——我需要忽略列(我在解析器函数中这样做),而“demo.txt”是一个压缩文件。这还能用吗?我在“解析器”中拆分s以选择列,并得到一个indexerror@Stefan检查我刚才在答案中所做的编辑。。。有一个参数
usecols
,您应该使用它来忽略某些列。。。我觉得这对你来说太完美了case@SaulloCastro谢谢,我误解了生成器的工作原理——我认为usecols查看的是文件,而不是生成器的输出。我的输入文件比这个复杂一点,所以我只替换了所有的“=”和“;”使用“\t”,然后使用COLS选择我感兴趣的。再次感谢!