Преобразование двоичного (байтов) в str и наоборот - PullRequest
0 голосов
/ 25 декабря 2018

Предположим, у меня есть двоичные данные, такие как в столбце dataframe:

b'x\x9c\xd4\x14Q\xd3\xf7\x92\x8b\x89 \x01\xc3)B\x8c\x80\x91#\x86\xfb\xa6\x9b\x10\xce\x00\x86p\x85Cr\x11\xd8p\x84\xcc\x12<A\x17!'

Мне нужна идея, как преобразовать их в строку для каждого binary только значение столбца, так как это dataframe необходимо преобразовать в тип json и передать в результате конечной точки остальных API.

Вот как я возвращаю dataframe в формате json (выполнение этого с dataframe с двоичным кодом вызовет исключение):
return json.loads(df.to_json(orient='table'))
Принимая во внимание, что df является фреймом данных

Я бы, конечно, захотел узнать, как преобразовать двоичные значения из строкового представления bytes в bytes - двоичное снова.

1 Ответ

0 голосов
/ 25 декабря 2018

Вам необходимо знать кодировку, используемую для создания этих байтов.Кодировка по умолчанию зависит от платформы, вы проверяете свою:

import sys
sys.getdefaultencoding() # 'utf-8' on macos python 3.7

Если вы передадите строку в pickle.dumps, она будет кодировать ее с использованием кодировки по умолчанию, если вы хотите использовать другую кодировку, вы можете закодировать строкуперед передачей его в pickle.dumps (в качестве примера).

In [2]: pickle.dumps('höy') # will be 'utf-8' encoded by default
Out[2]: b'\x80\x03C\x04h\xc3\xb6yq\x00.'

In [3]: 'höy'.encode('utf-8')
Out[3]: b'h\xc3\xb6y' # compare with the previous output

In [4]: pickle.dumps('höy'.encode('latin1'))
Out[4]: b'\x80\x03C\x03h\xf6yq\x00.'

In [5]: 'höy'.encode('latin1')
Out[5]: b'h\xf6y' # compare with the previous output

На основе кодировок вы можете декодировать ваши строки:

In [1]: 'höy'.encode('utf-8').decode('utf-8')
Out[1]: 'höy'

In [2]: 'höy'.encode('latin-1').decode('latin-1')
Out[2]: 'höy'

Использование неправильной кодировки приведет к сбою илиневерный результат:

In [3]: 'höy'.encode('utf-8').decode('latin-1')
Out[3]: 'höy'

И не каждый случайный набор байтов является закодированной строкой:

In [6]: pickle.dumps('höy').decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-6-2b1872a5aa1a> in <module>
----> 1 pickle.dumps('höy').decode('utf-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...