2012-07-26 17 views
40

Quiero crear un programa de Python que tome múltiples líneas de entrada del usuario. Por ejemplo:¿Cómo leo múltiples líneas de entrada sin formato en Python?

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

¿Cómo puedo tomar múltiples líneas de entrada sin procesar?

+3

Si está tomando múltiples líneas de entrada, ¿cómo sabe cuándo ha finalizado la entrada? – Blckknght

+1

Tiene un ciclo que toma raw_input hasta que el usuario ingresa 'hecho' o algo así. – Pramod

+1

Supongo que está apuntando a la entrada del usuario, pero puede agregar líneas nuevas \ n al mensaje, por ejemplo: entrada_ruta ('foo \ nbar:') –

Respuesta

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

para conseguir cada línea como una cadena que puede hacer:

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

Python 3:

'\n'.join(iter(input, sentinel)) 
+4

He sido pythonista durante aproximadamente 6 años y nunca supe de esta otra forma de 'iter()'. ¡Usted señor es un genio! – inspectorG4dget

+4

¿Cómo configuro EOF como el personaje centinela? – MadTux

+0

@jamylak - ¿esto no permite un aviso en 'raw_input'? Parece que no puede pasar parámetros a la función en el primer arg de 'iter'. – Randy

6

leer mantener las líneas hasta que el usuario introduce una línea vacía (o cambio stopword a otra cosa)

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

Alternativamente, puede intentar sys.stdin.read()

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

Proporcione más detalles, como un código de ejemplo que muestre cómo usar esta función. –

1

Sólo extender esta respuesta https://stackoverflow.com/a/11664652/4476612 en lugar de cualquier palabra parada sólo puede comprobar si una línea está allí o no

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

obtendrá la líneas en una lista y luego únete con \ n para obtener su formato.

print '\n'.join(content) 
Cuestiones relacionadas