cStringIO, insertar caracteres, string mutables.

Chema Cortes pych3m4 en gmail.com
Lun Abr 2 15:41:20 CEST 2007


El 2/04/07, tny <a.porrua en gmail.com> escribió:
> ¿Se pueden insertar caracteres al principio o dentro de un StringIO?
> ¿Sólo se pueden sobreescribir?

Sí, funciona como cualquier fichero; no puedes insertar, sólo añadir o
sobreescribir.


> No he visto como se puede hacer.
>
> Sólo se me ocurre crear un nuevo StringIO.
>
> ¿Sería más recomendable emplear una lista de strings y hacer un
> "".join() cuando necesite el string?

Si no dices más sobre la naturaleza del problema, sólo te puedo decir
que es la mejor solución. Puedes crear una lista de "pedazos" (chunks)
que insertas y modificas como necesites, y acabas por unirlos para
obtener el resultado final. Hay algoritmos para mejorar la eficiencia
según lo que vayas a hacer. La idea que prevalece es que es muy
costoso en tiempo y memoria el operar con strings inmutables. Para
ello, los algoritmos intentan reducir el número de operaciones entre
cadenas, muy similar a la resolución óptima de las torres de Hanoi.


> Otra duda de los StringIO, he leido algo acerca de problemas al mezclar
> codificaciones, yo lo quiero para binario (bytes), ¿me sirve?

El problema está en mezclar unicode con ascii. Si no usas unicode no
tendrás problemas para trabajar en bytes.


> Y otra más ¿el mmap es buscarse muchos líos para poca cosa, verdad?

Pues no sé qué decirte. Antes de hacerlo con mmap yo intentaría
hacerlo con sqlite o bsddb, que también pueden crear bases de datos en
memoria.




Más información sobre la lista de distribución Python-es