Подтвердить что ты не робот

Разбиение байтовой строки на строки

Как я могу разбить строку байтов на список строк?

В python 2 у меня было:

rest = "some\nlines"
for line in rest.split("\n"):
    print line

Приведенный выше код упрощен ради краткости, но теперь после некоторой обработки регулярного выражения у меня есть массив байтов в rest, и мне нужно итерации строк.

4b9b3361

Ответ 1

Нет причин для преобразования в строку. Просто укажите параметры split байтов. Разделить строки со строками, байты с байтами.

Python 3.2.3 (default, Oct 19 2012, 19:53:57) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = b'asdf\nasdf'
>>> a.split(b'\n')
[b'asdf', b'asdf']

Ответ 2

Декодировать байты в unicode (str), а затем использовать str.split:

Python 3.2.3 (default, Oct 19 2012, 19:53:16) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = b'asdf\nasdf'
>>> a.split('\n')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Type str doesn't support the buffer API
>>> a = a.decode()
>>> a.split('\n')
['asdf', 'asdf']
>>> 

Вы также можете разделить на b'\n', но я думаю, вам придется работать со строками, а не байтами. Поэтому скопируйте все свои входные данные в str как можно скорее и работайте только с юникодом в коде и конвертируйте его в байты, когда это необходимо для вывода как можно позже.

Ответ 3

попробуйте это...

rest = b"some\nlines"
rest=rest.decode("utf-8")

тогда вы можете сделать rest.split("\n")