Python 如何在 Numpy 数组中获取接收到的字节数据

How to get received Bytes data in Numpy array in Python

我正在开发一个 python 程序来从 TCP 套接字接收数据。我能够成功地接收到字节格式的数据。我需要的结果是接收 Numpy 数组格式的输出。请在下面的代码中帮助我接收 numpy 数组格式的输出。

代码:

from __future__ import print_function
import socket
import sys
import time
from time import sleep
import csv
start = time.time()
def comm_dists(ip, port):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (ip, port)
    print(sys.stderr, 'connecting to %s port %s' % server_address)
    sock.connect(server_address)
    print("Connected")
    try:

        # Send data
        message = b'\x02\x02\x02\x02\x00\x00\x00\x10sMI 0 3 F4724744 '
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        # Look for the response
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        sleep(0.05)
        # Error Verification
        #erros(data)
        message = b"\x02\x02\x02\x02\x00\x00\x00\x06sMI 5E'"
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        sleep(0.05)
        message = b'\x02\x02\x02\x02\x00\x00\x00\x05sMI 2e'
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        sleep(0.05)
        message = b'\x02\x02\x02\x02\x00\x00\x00\x07sEI A 1\x0f'
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        sleep(0.05)
        message = b'\x02\x02\x02\x02\x00\x00\x00\x06sRI C5>'
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        sleep(0.05)
        while True:
            data = sock.recv(500)
            print('received "%s"' % data)
    finally:
        print(sys.stderr, 'closing socket')
    return data

i=0

while i < int(1):
    data = comm_dists('192.168.0.1', 2111)
    data = data.decode()
    # data = re.sub(r'[^\x00-\x7f]', r'', data)
    print(data)
    end = time.time()
    print(end - start, 'segundos')
    i=i+1 

下面是连续输出:

"b'\x02\x02\x02\x02\x00\x00\x00\x08sMA 0002]\x02\x02\x02\x02\x00\x00\x00\x0bsAI 0002 01x\x02\x02\x02\x02\x00\x00\x05\x97sSI 000A 425C0000 3E800000 0118 0AAB 0A98 0A87 0A6D 0A47 0950 0395 0397 038C 0389 0383 0384 037B 037E 0372 036C 0371 0370 0368 0365 0367 0362 0366 0364 035C 034D 0356 0353 0350 034B 034A 034F 0345 0346 0349 033B 033E 033C 033D 033C 033A 0334 0333 0336 0334 0330 0331 0331 0326 0325 0327 0323 0323 031E 031F 031F 0323 0320 031B 0319 0317 0319 0318 0317 0311 0314 030B 030E 030A 030D 0307 030C 030B 0309 030C 0307 0308 0302 0307 02FF 0301 0300 02FE 0300 02FC 02FA 02FE 02F9 02FC 02F8 02FB 02F7 02F7 02F8 02F3 02FB 02FB 02F5 02F4 02F3 02F2 02EC 02EE 02EF 02ED 02F0 02F0 02EB 02F1 02F0 02EA 02EB 02E7 02EB 02EA 02EB 02E9 02EC 02EA 02EC 02E5 02E3 02EC 02EA 02E4 02E8 02E7 02EC 02E7 02E4 02EC 02E8 02ED 02E1 02D9 029F 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000o'"
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> sending "b'\x02\x02\x02\x02\x00\x00\x00\x06sRI C5>'"
sent "b'\x02\x02\x02\x02\x00\x00\x00\x06sRI C5>'"
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> received "b'\x02\x02\x02\x02\x00\x00\x00\x0bsEA 000A 01\x07\x02\x02\x02\x02\x00\x00\x05\x97sSI 000A 425C0000 3E800000 0118 0AC1 0AB1 0A9B 0A8C 0A64 0A4E 0502 038B 0392 0386 0389 038D 0376 0374 0375 0376 0378 036F 036B 0367 0363 0363 035D 035E 0358 0357 0357 0351 0351 0352 0349 034C 0346 0344 0341 034B 033F 0341 0339 033C 033B 033B 0332 0331 0330 032B 0331 032F 032A 0327 0322 0324 0328 031E 031E 0320 0320 031C 0321 031D 0318 0317 0317 0316 0314 030F 0314 030D 0309 030C 030C 0309 0309 030A 0305 0303 0304 0303 0300 0303 02FE 0301 02F9 02FF 02FF 02FA 02F9 02FD 02FC 02F8 02F4 02FD 02F6 02F6 02F2 02FA 02FA 02F2 02F0 02F3 02F2 02F5 02EF 02F0 02EE 02EC 02F0 02E9 02F2 02EF 02ED 02EE 02E9 02EE 02EB 02E6 02E7 02E6 02E8 02E9 02EE 02E7 02E9 02E6 02E9 02E1 02E3 02E6 02E9 02E8 02EC 02E1 02EA 02D6 02DE 02CE 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000\x19'"
received "b'\x02\x02\x02\x02\x00\x00\x05\x97sRA 00C5 425C0000 3E800000 0118 0AC1 0AB1 0A9B 0A8C 0A64 0A4E 0502 038B 0392 0386 0389 038D 0376 0374 0375 0376 0378 036F 036B 0367 0363 0363 035D 035E 0358 0357 0357 0351 0351 0352 0349 034C 0346 0344 0341 034B 033F 0341 0339 033C 033B 033B 0332 0331 0330 032B 0331 032F 032A 0327 0322 0324 0328 031E 031E 0320 0320 031C 0321 031D 0318 0317 0317 0316 0314 030F 0314 030D 0309 030C 030C 0309 0309 030A 0305 0303 0304 0303 0300 0303 02FE 0301 02F9 02FF 02FF 02FA 02F9 02FD 02FC 02F8 02F4 02FD '"
received "b'02F6 02F6 02F2 02FA 02FA 02F2 02F0 02F3 02F2 02F5 02EF 02F0 02EE 02EC 02F0 02E9 02F2 02EF 02ED 02EE 02E9 02EE 02EB 02E6 02E7 02E6 02E8 02E9 02EE 02E7 02E9 02E6 02E9 02E1 02E3 02E6 02E9 02E8 02EC 02E1 02EA 02D6 02DE 02CE 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 '"
received "b'0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000\x17'"
received "b'\x02\x02\x02\x02\x00\x00\x05\x97sSI 000A 425C0000 3E800000 0118 0ABE 0AA9 0AA1 0A83 0A64 0A49 07C4 038E 0387 0385 0389 0384 037F 037F 0384 0376 0375 0372 0374 036D 0366 035C 0363 0360 035C 0359 035C 0352 0351 034B 0348 034C 0346 034A 0345 0347 0345 0342 0341 033A 033A 0335 0337 0336 0331 032F 032A 032D 032E 0325 0327 0322 0325 0329 0326 0322 031F 0321 0318 031B 031B 0317 031C 0311 0318 0312 030F 0311 030A 030A 030A 030A 030C 030C 0305 0309 0308 0304 0308 0305 0306 0307 02FE 02FA 02FE 0302 02FC 02FC 02F9 0300 02FA 02F7 '"

所需结果: 我想将以上这些输出视为一个 numpy 数组。请帮助上面的代码修改结果。

这样做:

data = sock.recv(5000)
np.frombuffer(data, dtype='u1')

或者如果您想将这些值视为字符,您可以选择另一个 1 字节的数据类型,例如 'S1',或者如果您想将它们视为有符号,则可以选择 'i1'