我正在通过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位整数。我挂了最后一步。我希望这对我所要求的是有道理的。感谢。
答案 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)