Spaces:
Running
on
Zero
Running
on
Zero
| import io | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| class StringIteratorIO(io.TextIOBase): | |
| """From: https://stackoverflow.com/a/12604375""" | |
| def __init__(self, iter): | |
| self._iter = iter | |
| self._left = '' | |
| def readable(self): | |
| return True | |
| def _read1(self, n=None): | |
| while not self._left: | |
| try: | |
| self._left = next(self._iter) | |
| except StopIteration: | |
| break | |
| ret = self._left[:n] | |
| self._left = self._left[len(ret):] | |
| return ret | |
| def read(self, n=None): | |
| buf = [] | |
| if n is None or n < 0: | |
| while True: | |
| m = self._read1() | |
| if not m: | |
| break | |
| buf.append(m) | |
| else: | |
| while n > 0: | |
| m = self._read1(n) | |
| if not m: | |
| break | |
| n -= len(m) | |
| buf.append(m) | |
| return ''.join(buf) | |
| def readline(self): | |
| buf = [] | |
| while True: | |
| i = self._left.find('\n') | |
| if i == -1: | |
| buf.append(self._left) | |
| try: | |
| self._left = next(self._iter) | |
| except StopIteration: | |
| self._left = '' | |
| break | |
| else: | |
| buf.append(self._left[:i+1]) | |
| self._left = self._left[i+1:] | |
| break | |
| return ''.join(buf) |