2012-04-30 18 views
7

मुझे अपने पायथन प्रोग्राम में ऑब्जेक्ट्स का आकार जानने की आवश्यकता है। मेरे पास for लूप है जिसमें मुझे वस्तुओं के आकार को जानने की आवश्यकता है। यदि मैं sys.getsizeof का उपयोग करता हूं तो स्मृति तुरंत मुक्त नहीं होती है और मैं वास्तविक आकार नहीं देख सकता। क्या ऐसा करने का कोई तरीका है?पायथन। किसी ऑब्जेक्ट का आकार प्राप्त करें

मेरी ऑब्जेक्ट्स जेसन और स्ट्रिंग हैं। सबसे खराब मामले में मैं फ़ाइल को सहेजने और फ़ाइल आकारों को देखने के लिए सहेज सकता हूं। लेकिन मैं पाइथन कोड से फ़ाइल आकार पर कैसे देख सकता हूं?

संपादित: धारावाहिक वस्तुओं के आकार मेरे लिए ज्यादा महत्वपूर्ण है। प्रश्न का दूसरा भाग आवश्यक है।

धन्यवाद।

+0

एक फ़ाइल का (एक वस्तु का धारावाहिक रूप का प्रतिनिधित्व) डिस्क पर आकार पर विचार जरूरी स्मृति की मात्रा इसी वस्तु के कब्जे के अनुरूप नहीं है। _Why_ आपको आकार जानने की ज़रूरत है? क्या आप स्मृति खपत से चिंतित हैं? आप जिस बड़ी समस्या को हल करने की कोशिश कर रहे हैं वह क्या है? –

+0

आप इस जानकारी के साथ क्या करने की कोशिश कर रहे हैं? आपके लक्ष्य के लिए एक और सुव्यवस्थित मार्ग हो सकता है। –

+0

आपको इसके लिए क्या चाहिए? कई प्रकार के "आकार" हैं। – hamstergene

उत्तर

11

type(json.dumps(something))==str को ध्यान में रखते हुए आपको सचमुच len का उपयोग करने में सक्षम होना चाहिए।

निम्नलिखित

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

मैं 2012 में इसे पोस्ट करने के बाद से इसका पालन करना चाहता हूं। यह अजगर 2.7 पर लागू है। पायथन 3 स्ट्रिंग्स में मूल रूप से यूनिकोड वर्णों का समर्थन करते हैं और इसलिए यह मानना ​​सुरक्षित नहीं है कि 'लेन (str_object) 'बाइट्स की संख्या के बराबर है क्योंकि यूनिकोड वर्ण आवश्यक रूप से 1 बाइट नहीं हैं। पायथन 3 में आप 'लेन (json_obj.encode ("utf-8") कर सकते हैं)' जो बाइट्स की संख्या होनी चाहिए। – lukecampbell

+0

बहुत संभावना है कि धारावाहिक वस्तु को utf-8 के रूप में भी एन्कोड किया जाएगा। यदि डेटा ASCII में है, या अधिकांशतः दोनों प्रारूपों में समान है, तो मूल सलाह न केवल उपयोगी है बल्कि अभी भी सटीक है। फिर भी, मुझे उम्मीद है कि यह बाइट्स में सही लंबाई प्रदान करने के लिए अपडेट किया जा सकता है। हालांकि मैं एक संपादन का प्रस्ताव देने के लिए काफी समझ में नहीं आता हूं। – bitchaser

संबंधित मुद्दे