在 Python 3 中使用 Ctrl-D 和 sys.stdin.readlines() 后,如何避免 input(



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

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

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

玛丽和贝丝

去了

公园。

2( 将所有行合并为一行,替换空格的 ,如下所示:

玛丽和贝丝去了公园。

我一直在做大量的阅读,我发现让用户一次输入多行文本的首选方法是使用 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

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

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

我试过了,但现在我收到以下错误:OSError:[Errno 6] 未配置设备:"/dev/tty"。我也尝试了sys.stdin.flush((,但无济于事。

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

提前感谢一吨! 马里亚诺

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

您可以使用fileinput模块:

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

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

您的代码可以替换为

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

RStrip删除尾随换行符和空格。

相关内容

  • 没有找到相关文章

最新更新