如何将多个输入行合并为一个字符串?

时间:2016-12-16 14:26:10

标签: 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
  4. 我发现如果我在文本的开头和结尾添加一个双撇号("),如果文本在单行中添加,则它会解释右输入(作为整个字符串)。在输入文本的开头和结尾包含(")并不是很多,但是当我将文本显示在一行中时(通过添加{{1将单个序列中的经文组合在一起)在每节经文的末尾,例如)在介绍大文本时非常乏味。

    我的程序如何将某些输入解释为整个字符串并避免所有这些问题? (一种解决方法是回答这个问题:如何在不花费数小时的情况下将单个字符串序列中的多个代码行组合起来?)

2 个答案:

答案 0 :(得分:3)

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)

BTW:显示不同平台的不同提示:

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

答案 1 :(得分:2)

关于输入多行的事情:解决这个问题的一种方法是要求用户在输入结束时输入某种停用词:

def multiline_input(prompt, end="END"):
    lines = []
    line = input("{} (enter {} to end input): ".format(prompt, end))
    while line != end:
        lines.append(line)
        line = input()
    return "\n".join(lines)

s = multiline_input("enter stuff")

另一种常见做法是接受输入,直到用户输入空行,但对于您的示例,这不起作用。不过,您可以等待两个连续的空白行。

但请注意:如果您的input函数正在解释内容,如引号或Python关键字,那么您不是使用Python 3.x而是使用Python 2.要么确保真的使用Python 3,或使用raw_input代替。