2012-04-30 16 views
7

Potrzebuję znać rozmiar obiektów w moim programie Pythona. Mam pętlę for, w której muszę znać rozmiar obiektów. Jeśli używam sys.getsizeof, pamięć nie zwalnia natychmiast i nie widzę rzeczywistego rozmiaru. Czy jest sposób na zrobienie tego?python. uzyskać rozmiar obiektu

Moje obiekty to json i string. W najgorszym przypadku mogę zapisać je do pliku i sprawdzić rozmiary plików. Ale jak mogę wyglądać na w rozmiarze pliku z kodu Pythona?

Edycja: rozmiar serializowanych obiektów jest dla mnie ważniejszy. , więc druga część pytania jest niezbędna.

Dzięki.

+0

wielkości pliku (reprezentujący szeregowany formę przedmiotu) na dysku, nie musi odpowiadać ilości pamięci zajmowanym przez odpowiedni obiekt. _Dlaczego musisz znać rozmiar? Czy masz na uwadze zużycie pamięci? Jaki jest większy problem, który próbujesz rozwiązać? –

+0

Co dokładnie próbujesz zrobić z tymi informacjami? Może istnieć bardziej usprawniona ścieżka do celu. –

+0

Do czego jest to potrzebne? Istnieje kilka rodzajów "rozmiarów". – hamstergene

Odpowiedz

11

Biorąc pod uwagę, że type(json.dumps(something))==str powinieneś być w stanie dosłownie po prostu użyć len.

Rozważmy następujący

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

Chciałbym to sprawdzić, ponieważ opublikowałem to w 2012 roku. To dotyczy Pythona 2.7. W ciągach znaków w języku Python 3 obsługiwane są znaki unicode i dlatego nie można bezpiecznie założyć, że 'len (str_object)' jest równy liczbie bajtów, ponieważ znaki Unicode niekoniecznie mają rozmiar 1 bajta. W pythonie 3 możesz zrobić 'len (json_obj.encode (" utf-8 "))', który powinien być liczbą bajtów. – lukecampbell

+0

Bardzo prawdopodobne, że obiekt serializowany będzie również zakodowany jako utf-8. Jeśli dane są w ASCII, lub w większości takie same w obu formatach, oryginalna rada jest nie tylko przydatna, ale wciąż dość dokładna. Niemniej jednak, mam nadzieję, że to może zostać zaktualizowane, aby zapewnić prawdziwą długość w bajtach. Nie mam wystarczającej wiedzy, by zaproponować edycję. – bitchaser

Powiązane problemy