1

我是一个完全的新手,试图自学 Python 以促进个人成长和发展。所以请对我放轻松。(如果有任何生物学问题,我很乐意回报您!)

我正在尝试在 MacOSX(10.14.2 Mojave)上的 PyCharm CE 中编写一个程序来执行以下操作:

1)让用户通过从源复制/粘贴一次输入一段多行的文本。例如:

玛丽和贝丝

去了

公园。

2) 将所有行合二为一,将 \n 替换为空格,如下所示:

玛丽和贝丝去了公园。

我已经做了很多阅读,我发现让用户一次输入多行文本的首选方法是使用 sys.stdin.readlines(),确保用户调用使用 Control-D 结束文件。到目前为止,我已经想出了以下内容

import sys


print('''What is the text that you would like to enter?
         (press command-d at the end)\n''')

orig_text = sys.stdin.readlines()
one_string = "".join(orig_text)
one_string = one_string.replace('\n','')
print(one_string)

到目前为止,一切都很好 - one_string 打印“玛丽和贝丝去了公园”。

当我使用常规的 input() 函数时,问题出在代码的后面......

search_word = input('Which word would you like to replace?')
print(search_word)

我收到以下错误消息:EOFError: EOF when reading a line

我看过其他有类似问题的帖子,有些答案建议我尝试...

sys.stdin.close()
sys.stdin = open('/dev/tty')
search_word = input('Which word would you like to replace?')
print(search_word)

我试过了,但现在我收到以下错误:OSError: [Errno 6] Device not configured: '/dev/tty'。我也试过sys.stdin.flush(),但无济于事。

在这一点上,我放弃了,决定问专业人士: a) 有没有更好的方法让用户将多行文本复制并粘贴到程序中;b)如果到目前为止我的方法还可以,我怎样才能在不破坏计算机的情况下摆脱 OSError?

提前致谢!马里亚诺

4

1 回答 1

0

sys.stdin.readline() 不是一个好的解决方案。

您可以使用该fileinput模块:

import fileinput

for line in fileinput.input():
    ... code ...

fileinput将遍历输入中指定为命令行参数中给出的文件名的所有行,如果没有提供参数,则循环遍历标准输入。

您的代码可以替换为

one_string = "".join(map(str.rstrip, fileinput.input()))

rstrip删除尾随的换行符和空格。

于 2020-05-12T07:00:21.867 回答