Tamaño de un objeto en python

Chema Cortes py en ls-l.org
Vie Jun 17 09:53:47 CEST 2005


Carlos Porter escribió:

> Yo parto del supuesto de que el archivo ya fue creado
> con pickle, y que en el se han guardado varios objetos
> de la misma clase o tipo, entonces:
> 
> si fuera el caso de que el archivo es demasiado grande
> como para utilizar el metodo load (que si no entiendo
> mal, carga todo el contendio de un archivo de una sola
> vez), y reitero, en el archivo se ha almacenado mas de
> un objeto (y no una lista de objetos)...
> 
> entonces sería posible acceder de manera directa a
> cualquier objeto dentro del archivo con solo saber que
> posición ocupa este objeto dentro de este.
> 
> Pido disculpas, por que no aclare que mi pregunta era
> puramente académica, es decir, no hay un problema real
> de por medio, por lo que seguramente he planteado mal
> mi inquietud.

Bueno, esto parece estar algo más claro. En realidad no necesitas saber
el tamaño del objeto; te bastaría con saber el tamaño de la cadena del
objeto "serializado" con pickle.

Si en lugar de usar un fichero plano utilizaras algo estructurado como
una base de datos Berkeley aún te sería aún más fácil. Sólo necesitarías
saber la posición del objeto en la lista, sin necesidad de complicarte
con los tamaños:

import bsddb, cPickle

db=bsddb.rnopen("/tmp/misobjs.db","c")

for n,o in enumerate(lista_objs):
    db[n+1]=cPickle.dumps(o)  #los registros empiezan por 1

r20=cPickle.loads(db[21]) #recuperar registro 20




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