Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Reader:
- def __init__(self, filename):
- self._delim_ = re.compile(r'\n', re.DOTALL)
- self._size_ = -1
- self._stack_ = []
- self._current_ = type('Reader.Current', (), dict(state=None))
- self.Push(filename)
- def Push(self, filename):
- self._stack_.append(type('Reader.State', (), dict(filename=filename, buffer='', element=0)))
- self._current_.state = self._stack_[-1]
- self._current_.state.file = open(self._current_.state.filename)
- def Pop(self):
- state = self._stack_.pop()
- if len(self._stack_) > 0:
- self._current_.state = self._stack_[-1]
- state.file.close()
- return state
- def __iter__(self):
- current = self._current_
- while True:
- if not current.state:
- break
- buffer = current.state.file.read(self._size_)
- if len(buffer) == 0:
- buffer = current.state.buffer
- self.Pop()
- if buffer != '':
- yield buffer
- if current.state:
- continue
- break
- current.state.buffer += buffer
- while True:
- match = self._delim_.search(current.state.buffer)
- if not match: break
- current.state.element += 1
- buffer = current.state.buffer
- current.state.buffer = current.state.buffer[match.end():]
- yield buffer[0:match.end()], current.state.element
Advertisement
Add Comment
Please, Sign In to add comment