如何从用户获得多行输入

时间:2015-05-14 13:49:01

标签: python input multiline

我想编写一个程序来获取多行输入并逐行处理它。为什么在Python 3中没有像Salefrm_subform这样的函数?

raw_input不允许用户将换行符分隔换行( Enter ),它只打印第一行。

可以存储在变量中,甚至可以将其读取到列表中吗?

5 个答案:

答案 0 :(得分:29)

raw_input可以正确处理EOF,所以我们可以写一个循环,直到我们收到用户的EOF(Ctrl-D):

Python 3

print("Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it.")
contents = []
while True:
    try:
        line = input()
    except EOFError:
        break
    contents.append(line)

Python 2

print "Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it."
contents = []
while True:
    try:
        line = raw_input("")
    except EOFError:
        break
    contents.append(line)

答案 1 :(得分:23)

在Python 3.x中,Python 2.x的raw_input()已被input()函数取代。但是,在这两种情况下,您都无法输入多行字符串,为此您需要逐行从用户处获取输入,然后使用.join() \n输入,或者您也可以使用各种行并使用+

分隔的\n运算符将它们连接起来

要从用户那里获得多行输入,您可以这样:

no_of_lines = 5
lines = ""
for i in xrange(5):
    lines+=input()+"\n"

print lines

或者

lines = []
while True:
    line = input()
    if line:
        lines.append(line)
    else:
        break
text = '\n'.join(lines)

答案 2 :(得分:3)

input(prompt)基本上等同于

def input(prompt):
    print(prompt, end='', file=sys.stderr)
    return sys.stdin.readline()

如果您愿意,可以直接从sys.stdin阅读。

lines = sys.stdin.readlines()

lines = [line for line in sys.stdin]

five_lines = list(itertools.islice(sys.stdin, 5))

前两个要求输入端以某种方式,通过到达文件的末尾或用户键入Control-D(或Windows中的Control-Z)来表示结束。无论是从文件还是从终端/键盘读取了五行,最后一行将返回。

答案 3 :(得分:1)

使用input()内置函数从用户处获取输入行。

您可以阅读the help here

您可以使用以下代码一次获得多行(以空行结束):

while input() != '':
    do_thing

答案 4 :(得分:0)

no_of_lines = 5
lines = ""
for i in xrange(5):
    lines+=input()+"\n"
    a=raw_input("if u want to continue (Y/n)")
    ""
    if(a=='y'):
        continue
    else:
        break
    print lines