Python 3: как заставить strip () работать для байтов - PullRequest
8 голосов
/ 05 марта 2012

Я преобразовал код Python 2 в Python 3. При этом я изменил

print 'String: ' + somestring

на

print(b'String: '+somestring)

, потому что я получил следующую ошибку:

Can't convert 'bytes' object to str implicitly

Но теперь я не могу реализовать строковые атрибуты, такие как strip (), потому что они больше не обрабатываются как строки ...

global name 'strip' is not defined 

для

if strip(somestring)=="":    

Как решить эту дилемму между переключением строки в байты и возможностью использовать строковые атрибуты?Есть ли обходной путь?Пожалуйста, помогите мне и спасибо заранее.

Ответы [ 3 ]

11 голосов
/ 05 марта 2012

Здесь есть две проблемы, одна из которых является актуальной, другая сбивает вас с толку, но не является реальной проблемой.Во-первых:

Ваша строка является байтовым объектом, то есть строкой 8-битных байтов.Python 3 обрабатывает это не так, как текст, то есть Unicode.Откуда вы получаете строку?Поскольку вы хотите рассматривать его как текст, вам, вероятно, следует преобразовать его в объект str, который используется для обработки текста.Обычно это делается с помощью функции .decode (), например:

somestring.decode('UTF-8')

Хотя вызов str () также работает:

str(somestring, 'UTF8')

(обратите внимание, что ваше декодирование может быть чем-то иным, чемUTF8)

Однако это не ваш вопрос.Ваш актуальный вопрос - как удалить строку байтов.И ответ заключается в том, что вы делаете это так же, как вы строите текстовую строку:

somestring.strip()

Нет встроенной функции strip () в Python 2 или Python 3. В Strip-функции есть функциястроковый модуль в Python 2:

from string import strip

Но было бы нецелесообразно использовать его, так как у строк есть метод strip (), что примерно десять лет или около того.Так что в Python 3 его больше нет.

3 голосов
/ 05 марта 2012
>>> b'foo '.strip()
b'foo'

Работает просто отлично.

Если вы имеете дело с текстом, то, вероятно, у вас должен быть просто фактический str объект, а не bytes объект.

2 голосов
/ 05 марта 2012

Я полагаю, что вы можете использовать функцию "str" ​​для приведения ее к строке

print str(somestring).strip()

или, может быть,

print str(somestring, "utf-8").strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...