Как удалить строки байтов, оставшиеся после распаковки из строки? - PullRequest
0 голосов
/ 28 января 2020

У меня есть несколько строк, которые представляют собой предложения, которые выглядят примерно так:

Having two illnesses at the same time is known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and it can make treating each disorder more difficult.

Я закодировал исходную строку с помощью .encode(), а затем сжал с помощью python. bz2 library.

Затем я распаковал с помощью bz2.decompress() и использовал .decode(), чтобы получить его обратно.

Любые идеи, как мне удобно удалить эти строки байтов из текста или избежать таких символов, как цитаты не декодируются должным образом?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я предполагаю, что вы ошибочно присвоили вышеуказанную байтовую строку «предложение» объекту типа str. Вместо этого его необходимо присвоить строковому объекту byte и интерпретировать его как последовательность байтов UTF-8. Сравните:

b = b'... known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and ...'
s = b.decode('utf-8')
print(b)
# b'... known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and ...'
print(s)
# ... known as “comorbidity” and ...

В любом случае проблема не связана со сжатием: сжатие без потерь (например, bzip2) никогда не изменяет данные:

print(bz2.decompress(bz2.compress(b)).decode('utf-8'))
# ... known as “comorbidity” and ...
1 голос
/ 28 января 2020

Мне кажется, что вы на самом деле не декодировали данные должным образом, интерпретируя \xe2\x80\x9ccomorbidity\xe2\x80\x9d как байты, и декодирование дает очень разумную строку:

>>> b"\xe2\x80\x9ccomorbidity\xe2\x80\x9d"
b'\xe2\x80\x9ccomorbidity\xe2\x80\x9d'
>>> _.decode()
'“comorbidity”'

Либо эти, либо исходные данные были сгенерированы неправильно / в первую очередь декодируется (до того, как он был закодирован в UTF-8 и сжат), например, источник данных UTF8 читался как ISO-8859-1 (который по сути является промежуточным).

Так что это биты I посмотрел бы:

  • действительно ли вы правильно декодируете после распаковки
  • является ли оригинал правильными данными
...