在python中将字符串转换为ndarray

时间:2014-10-02 23:14:48

标签: python list numpy multidimensional-array

我正在通过Python的套接字从A-D转换器读取数据流;数据以原始字节形式出现。我想将这些字节格式化为int32并将它们放入ndarray中。读取过程如下所示:

def datarecv():
    global msgbuf
    binlen = BURSTLEN + 4
    while len(msgbuf) < binlen:
        msgbuf = msgbuf + socket.recv(4096)
    reply = msgbuf[0:binlen]
    msgbuf = msgbuf[binlen:]
    # each recv comes with a 4 byte header that I throw away...
    return reply[4:]

成功使用以下命令将接收的数据写入文件:

with open(filename, "wb') as f:
    bytesremaining = framesize
    for i in range(lines):
        f.write(datarecv()[0:min(linesize, bytesremaining)])
        bytesremaining -= linesize

然后我可以用这样的内容回读文件:

>>> data = numpy.fromfile(filename, dtype='int32')
>>> type(data)
<type 'numpy.ndarray'>

所以我的数据变量是我正在寻找的格式,I.E。

>>> data[1:10]
array([4214234234, 2342342342, 2342342342, 34534535, 345345353, 5675757, 
      2142423424, 35334535, 35353535, 4754745754], dtype=int32)

**但我想省略写入文件的中间步骤。在我读入原始数据流后,我想让它成为一个ndarray,以便我可以操作数据。我可以从

更改这一行
        f.write(datarecv()[0:min(linesize, bytesremaining)])

        bigbuf = bigbuf + datarecv()[0:min(linesize, bytesremaining)]

然后我结束了一个大字符串。它是一串原始字节(不是ASCII),我必须转换为32位整数。我挂了最后一步。我希望这对我所要求的是有道理的。感谢。

1 个答案:

答案 0 :(得分:1)

您可以将bigbuf转换为numpy.fromstring

的数组

例如:

In [21]: bigbuf = "\1\0\0\0\2\0\0\0"

In [22]: fromstring(bigbuf, dtype=np.int32)
Out[22]: array([1, 2], dtype=int32)