Python中相当于C++中getline()函数的方法

6

在C++中,我们可以通过在getline()函数中指定自己选择的分隔符来输入多行文本。然而,在Python中我无法做到这一点!它只有raw_input()和sys.stdin.readline()方法,这些方法只读取直到我按下回车键。是否有任何方法可以自定义这个过程以便我可以指定自己的分隔符?

3个回答

3

您是否仍想按回车键创建多行文本?如何结束输入?或者您想在单行中指定多行文本?

如果是前者,请尝试循环使用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(";")

这正适合我的目的.. :-) - Arnab Sen Gupta

2
你可以尝试稍微修改这个方法,并在你的程序中使用它。首先,导入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行的数据,而无需对文件本身进行手术。


在使用linecache.getline读取文件时要小心,因为该模块会缓存读取的内容。如果文件可能在某个时间点被修改,则需要在获取行之前运行linecache.clearcache()来清除缓存。 - Gabriel Cia

0

你需要自己实现这样的函数。例如:

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, ".")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接