how do I "peek" into the next line?

Peter Otten __peter__ at web.de
Mon Dec 13 21:40:40 CET 2004


les_ander at yahoo.com wrote:

> Hi,
> suppose I am reading lines from a file or stdin.
> I want to just "peek" in to the next line, and if it starts
> with a special character I want to break out of a for loop,
> other wise I want to do readline().
> 
> Is there a way to do this?
> for example:
> while 1:
> line=stdin.peek_nextline()
> if not line: break
> if line[0]=="|":
> break:
> else:
>     x=stdin.nextline()
>     # do something with x
> 
> thanks

The itertools approach:

(some preparations)

>>> import itertools
>>> file("tmp.txt", "w").write("""\
... a
... b
... c
... |
... d
... e
... f
... """)

(1) You are only interested in lines after and including the "special" line:

>>> def predicate(line):
...     return not line.startswith("|")
...
>>> for line in itertools.dropwhile(predicate, file("tmp.txt")):
...     print line,
...
|
d
e
f

(2) You want both the "head" and the "tail", where the tail includes the
"special" line:

>>> lines = iter(file("tmp.txt"))
>>> for line in lines:
...     if line.startswith("|"):
...             lines = itertools.chain([line], lines)
...             break
...     print "head", line,
...
head a
head b
head c
>>> for line in lines:
...     print "tail", line,
...
tail |
tail d
tail e
tail f
>>>

Peter




More information about the Python-list mailing list