now suppose I have read the first line already. then I read the second line and notice that there is a ">" in front (my special character) then I want the put back the second line into the file or the stdin.
Another possibility -- have each call to __iter__ produce the next "section" of your data:
>>> class strangefileiter(object): ... def __init__(self, file): ... self.iter = peekable(file) ... self.yield_last = False ... def __iter__(self): ... if self.yield_last: ... yield self.iter.next() ... self.yield_last = False ... while True: ... next = self.iter.peek() ... if next.rstrip('\n') == "|": ... self.yield_last = True ... break ... yield self.iter.next() ... >>> f = strangefileiter(file('temp.txt')) >>> file('temp.txt', 'w').write("""\ ... text ... before first | ... | ... text after ... first | ... | ... final text""") >>> f = strangefileiter(file('temp.txt')) >>> for line in f: ... print repr(line) ... 'text\n' 'before first |\n' >>> for line in f: ... print repr(line) ... '|\n' 'text after\n' 'first |\n' >>> for line in f: ... print repr(line) ... '|\n' 'final text'
I'm not sure I'd do it this way -- it makes me a little nervous that each call to __iter__ iterates over something different. But it might be closer to what you were trying to do...
Steve -- http://mail.python.org/mailman/listinfo/python-list