Skip to main content
 首页 » 编程设计

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

2025年05月04日41bjzhanghao

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