Python 如何从用户获取多行输入

Python 如何从用户获取多行输入,python,input,multiline,Python,Input,Multiline,我想写一个程序,获得多行输入并逐行处理。为什么Python3中没有像raw\u input这样的函数 input不允许用户放置以换行符分隔的行(回车),它只打印回第一行 它可以存储在变量中,甚至可以读取到列表中吗?在Python3.x中,Python2.x的raw\u input()已被input()函数替换。但是,在这两种情况下,您都不能输入多行字符串,为此,您需要逐行从用户处获取输入,然后使用\n连接()它们,或者您也可以使用+运算符连接不同的行,并用\n分隔 要从用户处获得多行输入,您可以

我想写一个程序,获得多行输入并逐行处理。为什么Python3中没有像
raw\u input
这样的函数

input
不允许用户放置以换行符分隔的行(回车),它只打印回第一行


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

在Python3.x中,Python2.x的
raw\u input()
已被
input()
函数替换。但是,在这两种情况下,您都不能输入多行字符串,为此,您需要逐行从用户处获取输入,然后使用
\n
连接()它们,或者您也可以使用
+
运算符连接不同的行,并用
\n
分隔

要从用户处获得多行输入,您可以执行以下操作:

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

print(lines)

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

你可以阅读

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

输入(提示)
基本等同于

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)来发出结束信号。最后一个将在从文件或终端/键盘读取五行后返回。

raw\u input
可以正确处理EOF,因此我们可以编写循环,读取直到收到用户的EOF(Ctrl-D):

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
Python 3 Python 2
因为Python3.x中有
input()
用于从用户获取输入。但是它不允许放置多行显示您是否使用
raw\u input获得“多行输入”
?为什么不一次输入一行,循环直到用户输入一个空行?但我想一次输入所有行,这并没有回答我的第一个问题,只回答了第二个问题的一部分。好的,这很清楚。因此,没有选项粘贴几行用换行符分隔的文本并存储它们。将其写入一个文件,文本文件怎么样?是的,实际上在Python中,您可以通过使用
“multi-line-string”“”
@ZdaR
“multi-line-string”“”
获得一个多行字符串。欢迎使用SO:)最好在您发布的代码中添加一个解释作为答案,因此,它将帮助游客理解为什么这是一个好答案。好答案。要回答OP关于Python3的问题,请将
raw_input(“”
替换为
input()
,并将
print
语句更改为使用括号。当用户在行中写入一些内容,但不是按enter键换行时,他们按ctrl-d键触发EOR时会发生什么?根据我的测试,它会导致
contents
中的最后一个元素的最后一个字符被修剪。我认为您使用了双Ctrl-D(这不是我们在这里讨论的实际情况),因为单个Ctrl-D不能在非空行中触发EOFError。在PyDev中,按Ctrl-D结束输入无法正常工作。
[line.splitlines()用于sys.stdin中的行]
删除回车符。如果希望将数据管道化到Python,即
printf“line1\nline2\n”| Python-c“import sys;print(list(sys.stdin))”
Python-c”import sys;print(list(sys.stdin))“这就是OPs问题的答案。这真是太棒了。可能有一种方法可以实现自定义的退出命令,而不是强迫用户不自觉地按ctrl-d。我可能不知道这一点,但如果其他人想……。@DonkeyKong ctrl-d并不是那么不直观,如果你真的理解从文件读取意味着什么。如果您的用例用于由特定命令终止的输入,您的程序不应该简单地从
sys.stdin
读取。如果您的代码真的读取到文件的末尾,它的意思是:读取直到没有更多的内容可读取,直到读取特殊值才读取。Control-D是(特定于终端的)指示由键盘输入表示的“文件”结尾的方式。这不会将输入放入变量中。
lines = sys.stdin.readlines()

lines = [line for line in sys.stdin]

five_lines = list(itertools.islice(sys.stdin, 5))
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
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)
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)