我想创建一个Python程序,它接受多行用户输入。例如:
This is a multilined input.
It has multiple sentences.
Each sentence is on a newline.
如何接收多行原始输入?
答案 0 :(得分:70)
sentinel = '' # ends when this string is seen
for line in iter(raw_input, sentinel):
pass # do things here
要将每一行作为字符串,您可以这样做:
'\n'.join(iter(raw_input, sentinel))
Python 3:
'\n'.join(iter(input, sentinel))
答案 1 :(得分:6)
继续阅读行,直到用户输入空行(或将stopword
更改为其他内容)
text = ""
stopword = ""
while True:
line = raw_input()
if line.strip() == stopword:
break
text += "%s\n" % line
print text
答案 2 :(得分:5)
或者,您可以尝试sys.stdin.read()
import sys
s = sys.stdin.read()
print(s)
答案 3 :(得分:1)
只需延长此回答https://stackoverflow.com/a/11664652/4476612 而不是任何停止词你可以检查一行是否存在
content = []
while True:
line = raw_input()
if line:
content.append(line)
else:
break
您将获得列表中的行,然后使用\ n加入以获取您的格式。
print '\n'.join(content)
答案 4 :(得分:1)
尝试一下
import sys
lines = sys.stdin.read().splitlines()
print(lines)
输入:
1
2
3
4
输出: ['1','2','3','4']
答案 5 :(得分:1)
当您知道要读取的确切的行数时,从提示符/控制台读取多行的最简单方法是列表理解。
lists = [ input() for i in range(2)]
上面的代码读取2行。并将输入保存在列表中。
答案 6 :(得分:0)
>>> import sys
>>> data = sys.stdin.read()
line one
line two
line three
<<Ctrl+d>>
>>> for line in data.split(sep='\n'):
print(line)
o/p:line one
line two
line three
答案 7 :(得分:0)
*我花了很长时间在这个问题上苦苦挣扎,因为我想找到一种方法来读取多行用户输入,而无需用户用Control D(或停用词)终止它。 最后,我在python3中找到了一种使用pyperclip模块的方法(您必须使用pip install进行安装) 以下是获取IP列表的示例 *
import pyperclip
lines = 0
while True:
lines = lines + 1 #counts iterations of the while loop.
text = pyperclip.paste()
linecount = text.count('\n')+1 #counts lines in clipboard content.
if lines <= linecount: # aslong as the while loop hasn't iterated as many times as there are lines in the clipboard.
ipaddress = input()
print(ipaddress)
else:
break
对我来说,这正是我想要的;接受多行输入,执行所需的操作(此处为简单打印),然后在处理最后一行时中断循环。希望它对您同样有帮助。
答案 8 :(得分:0)
这是在python> 3.5版本中编写代码的最佳方式
a= int(input())
if a:
list1.append(a)
else:
break
即使您想限制值的数量也可以
while s>0:
a= int(input())
if a:
list1.append(a)
else:
break
s=s-1
答案 9 :(得分:0)
更简洁的方法(没有停用词 hack 或 CTRL+D)是使用 Python Prompt Toolkit
然后我们可以这样做:
from prompt_toolkit import prompt
if __name__ == '__main__':
answer = prompt('Paste your huge long input: ')
print('You said: %s' % answer)
即使是长多行输入,它的输入处理也非常有效。
答案 10 :(得分:0)
Python Prompt Toolkit 实际上是一个很好的答案,但上面的示例并没有真正展示它。一个更好的例子是来自示例目录的 get-multiline-input.py:
#!/usr/bin/env python
from prompt_toolkit import prompt
from prompt_toolkit.formatted_text import HTML
def prompt_continuation(width, line_number, wrap_count):
"""
The continuation: display line numbers and '->' before soft wraps.
Notice that we can return any kind of formatted text from here.
The prompt continuation doesn't have to be the same width as the prompt
which is displayed before the first line, but in this example we choose to
align them. The `width` input that we receive here represents the width of
the prompt.
"""
if wrap_count > 0:
return " " * (width - 3) + "-> "
else:
text = ("- %i - " % (line_number + 1)).rjust(width)
return HTML("<strong>%s</strong>") % text
if __name__ == "__main__":
print("Press [Meta+Enter] or [Esc] followed by [Enter] to accept input.")
answer = prompt(
"Multiline input: ", multiline=True, prompt_continuation=prompt_continuation
)
print("You said: %s" % answer)
使用此代码,您可以获得多行输入,即使在输入后续行之后,也可以编辑每一行。还有一些不错的附加功能,例如行号。输入通过按退出键然后按回车键结束:
~/桌面❯ py prompt.py
按 [Meta+Enter] 或 [Esc] 然后按 [Enter] 接受输入。
多行输入:第一行文本,然后回车
- 2 - 第二行文本,然后输入
- 3 - 第三行文字,方向键可以左右移动,回车
- 4 - 可以根据需要编辑行,直到您
- 5 - 按退出键,然后按回车键
你说:第一行文字,然后输入
第二行文本,然后输入
第三行文字,方向键左右移动,回车
和线条可以根据需要编辑,直到你
按退出键,然后按回车键
~/桌面❯