Adaptar um iterador para se comportar como um objeto semelhante a um arquivo em Python
Eu tenho um gerador produzindo uma lista de seqüências de caracteres. Existe um utilitário / adaptador em Python que poderia torná-lo parecido com um arquivo?
Por exemplo,
>>> 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
Como os dados podem ser grandes e precisam ser streables (cada fragmento tem alguns kilobytes, o fluxo inteiro é de dezenas de megabytes), não quero ansiosamente avaliar todo o gerador antes de passá-lo para o adaptador de fluxo.