【发布时间】:2014-11-28 01:08:26
【问题描述】:
我正在通过 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 位整数。我被这最后一步挂断了。我希望这是有道理的,我在问什么。谢谢。
【问题讨论】:
标签: python list numpy multidimensional-array