2012-04-30 37 views
7

Tôi cần biết kích thước của các đối tượng trong chương trình python của tôi. Tôi có vòng lặp for mà tôi cần biết kích thước của các đối tượng. Nếu tôi sử dụng sys.getsizeof thì bộ nhớ không miễn phí ngay lập tức và tôi không thể thấy kích thước thực. Có cách nào để làm điều đó không?python. lấy kích thước của một đối tượng

Đối tượng của tôi là json và chuỗi. Trong trường hợp xấu nhất, tôi có thể lưu chúng vào tệp và xem kích thước tệp. Nhưng làm cách nào tôi có thể xem ở kích thước tệp từ mã python?

Chỉnh sửa: kích thước của các đối tượng được tuần tự hóa là quan trọng hơn đối với tôi. vì vậy phần thứ hai của câu hỏi là điều cần thiết.

Cảm ơn.

+0

Kích thước của một tập tin (đại diện cho hình thức tuần tự của một đối tượng) trên đĩa không nhất thiết tương ứng với dung lượng bộ nhớ bị chiếm đóng bởi các đối tượng tương ứng. _Tại sao bạn cần biết kích thước? Bạn có quan tâm đến mức tiêu thụ bộ nhớ không? Vấn đề lớn hơn bạn đang cố gắng giải quyết là gì? –

+0

Chính xác thì bạn đang cố gắng làm gì với thông tin này? Có thể có một con đường hợp lý hơn cho mục tiêu của bạn. –

+0

Bạn cần điều này để làm gì? Có một số loại "kích cỡ". – hamstergene

Trả lời

11

Xem xét type(json.dumps(something))==str bạn có thể chỉ theo nghĩa đen là sử dụng len.

Hãy xem xét những điều sau

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

Tôi muốn theo dõi với điều này kể từ khi tôi đăng này vào năm 2012. Điều này được áp dụng cho python 2.7. Trong Python 3 chuỗi vốn hỗ trợ các ký tự unicode và do đó không an toàn để giả định rằng 'len (str_object)' bằng với số byte vì các ký tự unicode không nhất thiết phải là 1 byte. Trong python 3 bạn có thể làm 'len (json_obj.encode (" utf-8 "))' mà nên là số byte. – lukecampbell

+0

Rất có thể đối tượng được tuần tự hóa cũng sẽ được mã hóa thành utf-8. Nếu dữ liệu ở dạng ASCII, hoặc chủ yếu là giống nhau ở cả hai định dạng, lời khuyên ban đầu không chỉ hữu ích mà còn khá chính xác. Tuy nhiên, tôi hy vọng điều này có thể được cập nhật để cung cấp độ dài thực sự theo byte. Tôi không đủ hiểu biết để đề xuất một bản chỉnh sửa. – bitchaser

Các vấn đề liên quan