2012-04-30 36 views
7

Ho bisogno di conoscere la dimensione degli oggetti nel mio programma python. Ho il ciclo for in cui ho bisogno di conoscere la dimensione degli oggetti. Se utilizzo sys.getsizeof, la memoria non viene liberata all'istante e non riesco a vedere la dimensione effettiva. C'è un modo per farlo?python. ottenere la dimensione di un oggetto

I miei oggetti sono json e stringa. Nel peggiore dei casi posso salvarli su file e guardare le dimensioni dei file. Ma come posso guardare alla dimensione del file dal codice Python?

Modifica: la dimensione degli oggetti serializzati è più importante per me. quindi la seconda parte della domanda è essenziale.

Grazie.

+0

La dimensione di un file (che rappresenta la forma serializzata di un oggetto) sul disco non corrisponde necessariamente alla quantità di memoria occupata dall'oggetto corrispondente. _Perché-hai bisogno di sapere la taglia? Ti preoccupi del consumo di memoria? Qual è il problema più grande che stai cercando di risolvere? –

+0

Che cosa stai cercando di fare con queste informazioni? Potrebbe esserci un percorso più snello verso il tuo obiettivo. –

+0

Per cosa ti serve? Esistono diversi tipi di "taglie". – hamstergene

risposta

11

Considerando che type(json.dumps(something))==str si dovrebbe essere letteralmente in grado di utilizzare solo len.

consideri il seguente

obj = {'content' : 'something goes here'} 
json_obj = json.dumps(obj) 
json_size = len(json_obj) 

serialized_size = len(serialized_object) 

if json_size < serialized_size: 
    print "I'd use the JSON with this..." 
+3

Vorrei seguirlo da quando l'ho pubblicato nel 2012. Questo è applicabile a python 2.7. In Python 3 le stringhe supportano intrinsecamente i caratteri unicode e quindi non è sicuro assumere che 'len (str_object)' sia uguale al numero di byte poiché i caratteri unicode non sono necessariamente 1 byte ciascuno. In python 3 puoi fare 'len (json_obj.encode (" utf-8 "))' che dovrebbe essere il numero di byte. – lukecampbell

+0

Molto probabilmente l'oggetto serializzato sarà codificato anche come utf-8. Se i dati sono in ASCII, o per lo più uguali in entrambi i formati, il consiglio originale non è solo utile, ma comunque piuttosto accurato. Tuttavia, spero che questo possa essere aggiornato per fornire la lunghezza reale in byte. Non sono abbastanza esperto da proporre un montaggio. – bitchaser

Problemi correlati