2012-07-26 7 views
40

Chcę utworzyć program w języku Python, który pobiera wiele linii danych wejściowych użytkownika. Na przykład:Jak odczytać wiele wierszy nieprzetworzonego wejścia w Pythonie?

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

Jak mogę wziąć wiele linii nieprzetworzonego wejścia?

+3

Jeśli robisz wiele linii wejściowych, skąd wiadomo, kiedy wejście zostało zakończone? – Blckknght

+1

Masz pętlę, która pobiera raw_input, dopóki użytkownik nie wprowadzi "done" lub coś podobnego. – Pramod

+1

Domyślam się, że masz zamiar wprowadzić użytkownika, ale możesz dodać znaki nowej linii \ n do monitu, np .: raw_input ('foo \ nbar:') –

Odpowiedz

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

dostać każdą linię jako ciąg można zrobić:

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

Python 3:

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

Jestem pythonistą od około 6 lat i nigdy nie wiedziałem o ta inna forma 'iter()'. Pan jest genialnym geniuszem! – inspectorG4dget

+4

Jak ustawić EOF jako znak wartownika? – MadTux

+0

@jamylak - czy to nie pozwala na prompt w 'raw_input'? Wygląda na to, że nie możesz przekazać parametrów do funkcji w pierwszym arg z 'iter'. – Randy

6

zachować czytania wierszy, aż użytkownik wprowadzi pustą linię (lub zmienić stopword do czegoś innego)

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

Alternatywnie można spróbować sys.stdin.read()

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

Proszę podać więcej szczegółów, takich jak przykładowy kod pokazujący, jak korzystać z tej funkcji. –

1

tylko rozszerzenie tej odpowiedzi https://stackoverflow.com/a/11664652/4476612 zamiast dowolnego słowa zatrzymania można po prostu sprawdzić, czy linia jest tam lub nie

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

dostaniesz linie na liście, a następnie dołącz przy pomocy \ n, aby uzyskać swój format.

print '\n'.join(content) 
Powiązane problemy