class Reader: def __init__(self, filename): self.filename = filename self._file = None self.lineno = 0 self.charno = 0 def __enter__(self): self._file = open(self.filename, "r") return self def __exit__(self, type, value, tb): self._file.close() def char(self): ch = self._file.read(1) self.charno += 1 if ch == "\n": self.lineno += 1 self.charno = 0 return ch def peek(self): pos = self._file.tell() ch = self._file.read(1) self._file.seek(pos) return ch if __name__ == "__main__": with Reader("reader.py") as src: print(src.peek()) while src.peek() != "": print(src.char())