2016-03-18 1 views
-3

Ich habe das Gegenteil davon mehrere Male beantwortet gesehen. Ich benutze die Ausgabe des Subprozesses und wenn ich die Ausgabe drucke, zeigt es die \ n's an, anstatt tatsächlich zur nächsten Zeile zu gehen.Wie kann ich eine Zeichenfolge in Python mit Zeilenumbruchzeichen drucken, die in tatsächliche neue Zeilen übersetzt wurden?

out = subprocess(...) 
print (out) 

output >> 
some\ntext\nhere 

Was ich brauche, ist

output >> 
some 
text 
here 

EDIT: "out" enthält eine Kombination aus \ n der und \ t 'S \ r.

+1

Was ist 'repr (out)'? Enthält es tatsächlich z.B. '\\ n'? – jonrsharpe

Antwort

0
out = out.split('\n') 
for val in out: 
    print(val) 

Ausgang:

some 
text 
here 

Wenn Sie \ r und \ t als auch

out = 'some\rtext\nhere' 
result = [] 
temp_str = '' 
for val in out: 
    if val.isalpha(): 
     temp_str+=val 
    else: 
     result.append(temp_str) 
     temp_str = '' 
if temp_str: 
    result.append(temp_str) 
for val in result: 
    print(val) 

Ausgang:

some 
text 
here 
+0

Danke. Das ist eine gute Lösung. Problem ist, dass die Zeichenfolge eine Kombination aus \ r's und \ n's und \ t's hat. Gibt es eine Möglichkeit, mit allen Sonderzeichen umzugehen? Wenn nicht, kann ich mit der obigen Lösung leben. – Arash

+0

@Arash: Meine Antwort wurde aktualisiert, um Ihren Zustand einzuschließen – YBathia

1

Ich glaube Ihren Text roh codiert ist. Versuchen Sie die replace Methode am unteren Rand und sehen Sie, ob das funktioniert.

# Works fine for string. 
out = 'some\ntext\nhere' 

>>> print(out) 
some 
text 
here 

# Works fine for unicode. 
out = u'some\ntext\nhere' 

>>> print(out) 
some 
text 
here 

>>> repr(out) 
"u'some\\ntext\\nhere'" 

# Doesn't work for raw. 
out = r'some\ntext\nhere' 

>>> print(out) 
some\ntext\nhere 

>>> repr(out) 
"'some\\\\ntext\\\\nhere'" 

# Try this. 
print(out.replace('\\n', '\n')) 
some 
text 
here