2012-07-26 7 views
40

Ich möchte ein Python-Programm erstellen, das mehrere Zeilen der Benutzereingabe einnimmt. Zum Beispiel:Wie lese ich mehrere Zeilen von Rohdaten in Python?

This is a multilined input. 
It has multiple sentences. 
Each sentence is on a newline. 

Wie kann ich in mehreren Zeilen von Roh-Eingang?

+3

Wenn Sie mehrere Eingabezeilen verwenden, woher wissen Sie, wann die Eingabe beendet wurde? – Blckknght

+1

Haben Sie eine Schleife, die raw_input dauert, bis der Benutzer 'fertig' oder so etwas eingibt. – Pramod

+1

Ich denke, Sie zielen auf Benutzereingaben, aber Sie können Zeilenumbrüche \ n der Eingabeaufforderung hinzufügen, zB: raw_input ('foo \ nbar:') –

Antwort

54
sentinel = '' # ends when this string is seen 
for line in iter(raw_input, sentinel): 
    pass # do things here 

Um jede Zeile als String erhalten Sie tun können:

'\n'.join(iter(raw_input, sentinel)) 

Python 3:

Alternativ
+4

Ich bin seit etwa 6 Jahren ein Pythonist und ich wusste nie von diese andere Form von 'iter()'. Sie sind ein blöder Genie! – inspectorG4dget

+4

Wie setze ich EOF als Sentinel-Zeichen? – MadTux

+0

@jamylak - erlaubt dies nicht eine Eingabeaufforderung in 'raw_input'? Scheint so, als ob du keine Parameter an die Funktion im ersten Argument von 'iter' übergeben kannst. – Randy

6

lesen Sie Linien, bis der Benutzer eine leere Zeile eingibt (oder stopword etwas ändern sonst)

text = "" 
stopword = "" 
while True: 
    line = raw_input() 
    if line.strip() == stopword: 
     break 
    text += "%s\n" % line 
print text 
3

, können Sie versuchen, sys.stdin.read()

import sys 
s=sys.stdin.read() 
print s 
+1

Bitte geben Sie weitere Einzelheiten an, wie zum Beispiel einen Code, der zeigt, wie diese Funktion verwendet wird. –

1

Genau diese Antwort https://stackoverflow.com/a/11664652/4476612 anstelle eines Stoppwort erstrecken können Sie einfach überprüfen, ob eine Linie gibt oder nicht

content = [] 
while True: 
    line = raw_input() 
    if line: 
     content.append(line) 
    else: 
     break 

Sie das bekommen Linien in einer Liste und dann mit \ n verbinden, um in Ihr Format zu gelangen.

print '\n'.join(content)