Adapte un iterador para que se comporte como un objeto similar a un archivo en Python

Tengo un generador que produce una lista de cadenas. ¿Hay una utilidad / adaptador en Python que podría hacer que se vea como un archivo?

Por ejemplo,

>>> def str_fn():
...     for c in 'a', 'b', 'c':
...         yield c * 3
... 
>>> for s in str_fn():
...     print s
... 
aaa
bbb
ccc
>>> stream = some_magic_adaptor(str_fn())
>>> while True:
...    data = stream.read(4)
...    if not data:
...        break
...    print data
aaab
bbcc
c

Debido a que los datos pueden ser grandes y deben transmitirse (cada fragmento es de unos pocos kilobytes, el flujo completo es de decenas de megabytes), no quiero evaluar con entusiasmo todo el generador antes de pasarlo al adaptador de flujo.

Respuestas a la pregunta(8)

Su respuesta a la pregunta