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) |