2015-04-27 2 views
1

У меня есть текстовый файл с данными, такими какОткрытие файла в 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 

Моя цель заключается в том, чтобы обойти перенаправление в текстовый файл и передать его прямо в плоттер ... Но сначала я хотел заставить это работать.

+0

Что вы делали после 'bytes_read = f.read()'? Я не совсем понимаю. Это просто стало из ниоткуда? – skyline75489

+0

Ваша проблема в том, что Python обрабатывает ваш файл в том месте, где вы ожидаете, что он будет обработан неправильно. Ваш файл не является текстом, это двоичные данные. в сыром виде. Вы не должны пытаться сделать текст из него. И вы сделали это правильно, говоря python, чтобы открыть файл в режиме 'rb' (read, binary). –

+0

Но я не сделал текст из этого ... если бы я не сделал это неявно где-то? Есть ли другой способ захвата этих данных (например, не используя перенаправление с терминала)? – ADB

ответ

1

Удалось решить это, написав непосредственно в файл. Таким образом, вместо того, чтобы использовать «печать (данных)», и перенаправление в файл, я попытался это:

file = open("rawData", "wb") 
... 
file.write(data) 
... 
file.close() 

был в состоянии обработать «RAWDATA», как и ожидалось.

Смежные вопросы