Разбиение байтовой строки на строки
Как я могу разбить строку байтов на список строк?
В python 2 у меня было:
rest = "some\nlines"
for line in rest.split("\n"):
print line
Приведенный выше код упрощен ради краткости, но теперь после некоторой обработки регулярного выражения у меня есть массив байтов в rest
, и мне нужно итерации строк.
Ответы
Ответ 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")