python - 如何将多个输入行组合成一个字符串?

标签 python string

我正在使用 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.

在这种情况下:

  1. 它将撇号 (') 解释为包含文本。使文本的其余部分看起来像一系列命令(例如,最后一节中的 altre cose ch 部分变成一个字符串,用它写出的文本变成一系列命令)
  2. 它将“del”字(出现在第一行和第八行)解释为命令delete
  3. 它将“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/

相关文章:

java - 如何在Java中提取多项式系数?

python - matplotlib 中相同数据上具有不同单位的第二个绘图轴?

python - 手动分析程序

python - 如何在日志中包含附加参数,例如 python-bunyan 中的函数名称、行号、路径名

c - 为什么打印字符串时出现段错误(核心转储)?

c++ - strlen vs停止为零的字符串操作的性能

java - 在 Java 客户端和 Twisted Python 套接字服务器之间发送缓冲图像

Python 按键错误

python - 该函数接受输入字符串 x 列表并返回整数 ptr

c++ - 使用boost库将句子中每个单词的首字母大写