📅  最后修改于: 2023-12-03 14:46:40.269000             🧑  作者: Mango
在 Python 中,我们经常需要从用户获取多行输入。这可以用于实现各种功能,例如读取文件内容或从用户获取一系列命令等。
Python 的 input 函数可以用于从用户获取单行输入,但它无法处理多行输入。下面是一个使用 input 函数获取多行输入的示例代码:
lines = []
while True:
line = input()
if line:
lines.append(line)
else:
break
text = '\n'.join(lines)
这个代码使用一个 while 循环获取用户输入,直到用户在单独的一行输入空字符串为止。然后,它将输入的所有行连接到一个字符串中,并存储在变量 text 中。这种方法的缺点是它需要用户手动输入一个空行来表示输入的结束。
Python 中还有一个方法可以从用户获取多行输入,它使用 sys.stdin 对象。下面是一个使用该方法获取多行输入的示例代码:
import sys
text = sys.stdin.read()
这个代码直接将 sys.stdin 对象读取到一个字符串中,并将结果存储在变量 text 中。这种方法的优点是它可以轻松地处理多行输入,但它的缺点是必须使用一个特殊的结束字符(例如 Ctrl+D)来表示输入的结束。
在 Linux 和 Mac 上,可以使用 EOF 来表示输入的结束。用户可以通过键入 Ctrl+D 来输入 EOF。在 Windows 上,可以使用 Ctrl+Z 来输入 EOF。下面是一个使用该方法获取多行输入的示例代码:
text = ''
try:
while True:
line = input()
text += line + '\n'
except EOFError:
pass
这个代码使用一个 try/except 块来捕获 EOFError 异常,该异常会在用户输入 EOF 时触发。它将每行输入附加到一个字符串中,并在每行之间添加一个换行符。
在某些情况下,用户可能需要输入大量的文本,而且这些文本可能包含多个段落。在这种情况下,使用文本编辑器来输入文本可能更加方便。下面是一个使用该方法获取多行输入的示例代码:
import os
if os.name == 'posix':
# Unix 系统
text = os.popen('nano').read()
elif os.name in ('nt', 'dos', 'os2'):
# Windows 系统
import tempfile
with tempfile.NamedTemporaryFile(suffix='.txt') as f:
os.system(f'notepad.exe {f.name}')
f.seek(0)
text = f.read().decode()
else:
raise RuntimeError('Unsupported operating system')
这个代码使用 os.popen 函数和 Linux 上的 nano 编辑器,在 Linux 系统上打开一个编辑器,允许用户对输入的文本进行编辑。该代码还使用了 tempfile 模块和 Windows 上的 Notepad 编辑器,来在 Windows 系统上打开一个临时文件,允许用户对输入的文本进行编辑。