【发布时间】:2011-03-02 15:25:25
【问题描述】:
在 C++ 中,我们可以通过在 getline() 函数中选择分隔字符来输入多行。但是我不能在 Python 中做同样的事情!它只有 raw_input() 和 sys.stdin.readline() 方法,直到我按下回车键。有什么方法可以自定义这个,以便我可以指定自己的分隔符?
【问题讨论】:
在 C++ 中,我们可以通过在 getline() 函数中选择分隔字符来输入多行。但是我不能在 Python 中做同样的事情!它只有 raw_input() 和 sys.stdin.readline() 方法,直到我按下回车键。有什么方法可以自定义这个,以便我可以指定自己的分隔符?
【问题讨论】:
您仍要按 Enter 键来创建多行吗?你如何结束输入?还是您想在一行上指定多行?
如果是前者,请尝试循环 raw_input() 直到写出告诉它停止的内容:
lines = []
while True:
user_input = raw_input()
if user_input.strip() == "": # empty line signals stop
break
lines.append(user_input)
或者使用分隔符在一行中指定多行:
lines = raw_input().split(";")
【讨论】:
您可以尝试稍微修改一下这个方法以使用它并在您的程序中使用它。
首先,导入linecache模块:
import linecache
linecache 模块允许您访问任何文件中的任何行。在它的三种方法中,您可能使用最多的一种是 getline。 getline 的语法如下:
linecache.getline('filename', line_number)
如果您有一个名为“myfile.txt”的文件并想从中读取第 138 行,getline 可以让您轻松完成。
retrieved_line = linecache.getline('myfile.txt', 138)
然后您可以简单地打印retrieved_line 或以其他方式操作第138 行的数据,而无需对文件本身进行手术。
【讨论】:
您需要自己实现这样的功能。例如:
def getline(stream, delimiter="\n"):
def _gen():
while 1:
line = stream.readline()
if delimiter in line:
yield line[0:line.index(delimiter)]
break
else:
yield line
return "".join(_gen())
import sys
getline(sys.stdin, ".")
【讨论】: