我是一个完全的新手,试图自学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删除尾随换行符和空格。