2016-04-07 6 views
2

Dies ist eine ungewöhnliche Anfrage, und ich würde gerne einige Hinweise! :)Split-Bytes Variable auf Newline

Ich habe eine Python-Variable, der Einfachheit halber nennen wir es können ‚Output‘

Wenn ich Ausgabe drucken ich folgendes:

b"word1\nword2\nword3\n" 

Ich würde es lieben, wenn ich

drucken könnte
word1 
word2 
word3 
word4 

Ich habe versucht, die Variable zu teilen und es in eine for-Schleife mit Null-Erfolg zu füttern. Ich bin glücklich, die Ausgabe in eine Datei im Betriebssystem zu schreiben und bash zu verwenden, um das Problem ebenfalls zu lösen.

Danke!

Antwort

1

Sie brauchen, um dies zu tun (siehe string.split Funktion für weitere Details) ...

for word in output.decode('utf-8').split('\n'): 
    print word 

Und Sie brauchen nicht Wort zu drucken - Sie alles tun können Sie mit ihm wollen. Diese Schleife wird über jede Zeile in output iterieren.

+0

ohne args Aufruf Split nur auf mehr als aufgespalten wird '\ n '(die hier oder auch nicht Sache kann) –

+0

@ Zwei BitAlchemist Dank! Fest. – birdoftheday

+1

Wenn '\ n' gedruckt wird, bedeutet dies, dass die tatsächliche Zeichenfolge' \\ n' enthält. – zondo

-1
output = b"word1\nword2\nword3\nword4\n" 
for w in output.split(): 
    print(w) 
2

Für mich klingt es wie Ihr String hat newlines entkommen. str.split wird Ihnen hier nicht helfen, noch str.splitlines. Sie müssen die Fluchten entschlüsseln:

>>> print s 
word1\nword2\nwored3\n 
>>> print s.decode('string-escape') 
word1 
word2 
wored3 
+0

Interessant, also sollte ich es versuchen: print (output.decode ('\\ n'))? :) –

+0

Nein, versuche 'output.decode ('string-escape')' ... – wim

0

Es klingt wie Sie Python 3 verwenden und das Aufrufen der Äquivalent

>>> print(b"foo\nbar\nbaz") 
b'foo\nbar\nbaz' 

Das ist str(bytes) in Aktion: die (Unicode) Zeichenfolgendarstellung einer Bytestring . Indem Sie es zuerst entschlüsseln, erhalten Sie etwas, das Python 3 eleganter drucken wird.

>>> print(b"foo\nbar\nbaz".decode('utf-8')) 
foo 
bar 
baz