파이썬에서 소켓을 통해 A-D 변환기에서 데이터 스트림을 읽습니다. 데이터는 미가공 바이트로 제공됩니다. 이 바이트를 int32로 포맷하고 ndarray에 저장하려고합니다. 읽기 과정은 다음과 같은 :파이썬에서 문자열을 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'>
그래서 내 데이터 변수는 내가 찾고있는 형식입니다. IE
>>> data[1:10]
array([4214234234, 2342342342, 2342342342, 34534535, 345345353, 5675757,
2142423424, 35334535, 35353535, 4754745754], dtype=int32)
** 그러나 ** 파일에 기록하는 중간 단계는 생략하고 싶습니다. 원시 데이터 스트림을 읽은 후에 데이터를 조작 할 수 있도록 데이터 배열을 ndarray로 만들고 싶습니다. 나는
bigbuf = bigbuf + datarecv()[0:min(linesize, bytesremaining)]
에
f.write(datarecv()[0:min(linesize, bytesremaining)])
에서 라인을 변경할 수 있습니다 후 나는 큰 문자열로 끝낸다. 그것은 32 비트 정수로 변환해야하는 원시 바이트 문자열 (ASCII가 아님)입니다. 나는이 마지막 단계에서 끊어졌다. 이것이 내가 바라는 것이 의미가 있기를 바랍니다. 감사.
완벽, 내가 필요 정확히. 고맙습니다! – astronomerdave