Domanda stringa di byte diviso in linee


Come posso dividere una stringa di byte in una lista di linee?

In python 2 ho avuto:

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

Il codice sopra è semplificato per brevità, ma ora dopo l'elaborazione di espressioni regolari, ho un array di byte in rest e ho bisogno di scorrere le linee.


24
2017-12-13 10:28


origine


risposte:


Non c'è alcun motivo per convertire in stringa. Dai e basta split parametri di byte. Dividere le stringhe con le stringhe, i byte con i byte.

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']

54
2018-02-26 17:33



Decodificare i byte in unicode (str) e quindi utilizzare 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']
>>> 

Puoi anche dividere b'\n'ma suppongo che tu debba lavorare comunque con stringhe e non con byte. Quindi converti tutti i tuoi dati di input in str appena possibile e funziona solo con unicode nel codice e convertirlo in byte quando necessario per l'output il più tardi possibile.


18
2017-12-13 10:40



prova questo.. .

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

 allora puoi farlo rest.split("\n")


4
2017-12-13 10:49