split byte string into lines

PythonPython 3.x

Python Problem Overview


How can I split a byte string into a list of lines?

In python 2 I had:

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

The code above is simplified for the sake of brevity, but now after some regex processing, I have a byte array in rest and I need to iterate the lines.

Python Solutions


Solution 1 - Python

There is no reason to convert to string. Just give split bytes parameters. Split strings with strings, bytes with bytes.

>>> a = b'asdf\nasdf'
>>> a.split(b'\n')
[b'asdf', b'asdf']

Solution 2 - Python

Decode the bytes into unicode (str) and then use 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']
>>> 

You can also split by b'\n', but I guess you have to work with strings not bytes anyway. So convert all your input data to str as soon as possible and work only with unicode in your code and convert it to bytes when needed for output as late as possible.

Solution 3 - Python

try this.. .

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

then you can do rest.split("\n")

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFlaviusView Question on Stackoverflow
Solution 1 - PythonJanus TroelsenView Answer on Stackoverflow
Solution 2 - PythonwarvariucView Answer on Stackoverflow
Solution 3 - PythonnamitView Answer on Stackoverflow