我正在使用 Python 3 尝试创建一个分析文本的程序。 该程序要求像这样的输入(应该始终是一个字符串)
text=input('Inster a text: ')
原则上,如果我输入类似的内容
> Today was my best day at the restaurant
我的程序正确地执行了他的计算(即将整个输入理解为单个字符串)。
当我尝试插入像神曲的前 9 节这样的复杂文本时(当被要求输入时),问题就来了。
> Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
在这种情况下:
- 它将撇号 (') 解释为包含文本。使文本的其余部分看起来像一系列命令(例如,最后一节中的 altre cose ch 部分变成一个字符串,用它写出的文本变成一系列命令)
- 它将“del”字(出现在第一行和第八行)解释为命令delete
- 它将“dir”一词(出现在第四行)解释为命令direction
我发现,如果我在文本的开头和结尾添加一个双撇号 ("),并且如果文本出现在 1 行中,那么它将正确解释输入(作为一个完整的字符串)。要包括 ( ") 在我的输入文本的开头和结尾不是很多,但是当我使文本出现在一行中时的部分(通过在例如每节的结尾)在介绍大文本时非常乏味。
我的程序如何将像这样的输入解释为整个字符串并避免所有这些问题? (一种解决方法是回答以下问题:如何在不花费数小时的情况下将多个代码行组合成一个字符串序列?)
最佳答案
input()
从键盘读取数据,直到您按下 Enter
。
但是您可以使用 sys.stdin.read()
读取直到您按下 Ctrl+D(在 Linux 上测试),它发送 EOF
(文件结束)信息. (在 Windows 上可能是 Ctrl+C 或 Ctrl+Z)。
#!/usr/bin/env python
import sys
a = sys.stdin.read()
print('result:', a)
顺便说一句:为不同的平台显示不同的提示:
import sys
if sys.platform.startswith('win32'):
# Ctrl+Z is used by cmd.exe on Windows
print('Input multiline text and press "Ctrl+Z"')
else:
# Ctrl+D is used by linux, freebsd, probably mac
print('Input multiline text and press "Ctrl+D"')
参见:sys.platform
关于python - 如何将多个输入行组合成一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186484/