У меня есть текстовый файл с данными, такими какОткрытие файла в Python: массив байт, преобразованный в строку?
b'\x00\x09\x00\xfe'
Это Водопроводный кран в текстовый файл из потока TCP сокета. Вызовите этот текстовый файл 'stream.txt'. Я открыл этот файл со следующим кодом:
f = open("stream.txt", "rb")
bytes_read = f.read()
Когда я открываю этот файл в другом сценарии Python, я получаю «\» для каждого «\» в исходном файле. Кроме того, я не могу получить доступ к массиву байтов как таковой, поскольку он, похоже, стал строкой. То есть «bytes_read» теперь
'b"\\x00\\x09\\x00\\xfe"'
Как восстановить эту строку в виде массива байтов?
Клиент код, который я использовал, чтобы захватить эти данные есть следующий сценарий:
from socket import *
clientsock = socket(AF_INET, SOCK_STREAM)
clientsock.connect(('1.2.3.4', 2000)) # Open the TCP socket
clientsock.sendall(b'myCommand') # Send a command to the server
data = clientsock.recv(16) # Wait for the response
print(data) # For piping to 'stream.txt'
clientsock.close()
Поскольку данные выводятся на терминал, я перенаправлен в файл:
$ python3 client.py > stream.txt
Моя цель заключается в том, чтобы обойти перенаправление в текстовый файл и передать его прямо в плоттер ... Но сначала я хотел заставить это работать.
Что вы делали после 'bytes_read = f.read()'? Я не совсем понимаю. Это просто стало из ниоткуда? – skyline75489
Ваша проблема в том, что Python обрабатывает ваш файл в том месте, где вы ожидаете, что он будет обработан неправильно. Ваш файл не является текстом, это двоичные данные. в сыром виде. Вы не должны пытаться сделать текст из него. И вы сделали это правильно, говоря python, чтобы открыть файл в режиме 'rb' (read, binary). –
Но я не сделал текст из этого ... если бы я не сделал это неявно где-то? Есть ли другой способ захвата этих данных (например, не используя перенаправление с терминала)? – ADB