मैं एक पाइथन नौसिखिया स्मृति आवंटन की एक तालिका बनाने के लिए एक फ़ाइल को पार्स करने की कोशिश कर रहा हूं। मेरे इनपुट फ़ाइल निम्न स्वरूप में है:कुंजी के साथ पाइथन शब्दकोश कुंजी
48 bytes allocated at 0x8bb970a0
24 bytes allocated at 0x8bb950c0
48 bytes allocated at 0x958bd0e0
48 bytes allocated at 0x8bb9b060
96 bytes allocated at 0x8bb9afe0
24 bytes allocated at 0x8bb9af60
मेरा पहला उद्देश्य एक मेज है कि बाइट आवंटन के एक विशेष संख्या के उदाहरण में गिना जाता है बनाने के लिए है। दूसरे शब्दों में, ऊपर इनपुट के लिए मेरी वांछित आउटपुट की तरह कुछ होगा:
48 bytes -> 3 times
96 bytes -> 1 times
24 bytes -> 2 times
(अब के लिए, मैं स्मृति पतों के बारे में चिंतित नहीं हूँ)
जब से मैं अजगर का उपयोग कर रहा है, मैंने सोचा एक शब्दकोश का उपयोग करके ऐसा करने का सही तरीका होगा (पाइथन ट्यूटोरियल पढ़ने के लगभग 3 घंटे के लायक) के आधार पर। क्या यह एक बेहतर तरकीब है?
एक शब्दकोश का उपयोग करके ऐसा करने की कोशिश में, मैंने बाइट्स की संख्या 'कुंजी' और काउंटर को 'मान' के रूप में बनाने का निर्णय लिया। मेरी योजना कुंजी की हर घटना पर काउंटर बढ़ाने के लिए थी। फोन है, जो मुझे सवाल करने के लिए है कि क्या यह शब्दकोश कुंजी के रूप में चर का उपयोग करने के लिए भी संभव है की ओर जाता है
# Create an empty dictionary
allocationList = {}
# Open file for reading
with open("allocFile.txt") as fp:
for line in fp:
# Split the line into a list (using space as delimiter)
lineList = line.split(" ")
# Extract the number of bytes
numBytes = lineList[0];
# Store in a dictionary
if allocationList.has_key('numBytes')
currentCount = allocationList['numBytes']
currentCount += 1
allocationList['numBytes'] = currentCount
else
allocationList['numBytes'] = 1
for bytes, count in allocationList.iteritems()
print bytes, "bytes -> ", count, " times"
इस के साथ
, मैं 'has_key' में एक सिंटैक्स त्रुटि मिलती है: अब तक, मेरे कोड स्निपेट इस प्रकार है। मैंने जो भी उदाहरण देखा है, अब तक यह मानते हैं कि कुंजी पहले उपलब्ध हैं। मेरे मामले में, जब मैं इनपुट फ़ाइल को पार्स कर रहा हूं तो मैं केवल अपनी चाबियाँ प्राप्त कर सकता हूं।
(ध्यान दें कि मेरे इनपुट फ़ाइल विभिन्न चाबियों के सैकड़ों के साथ, लाइनों के हजारों में चला सकते हैं)
किसी भी मदद प्रदान कर सकते हैं के लिए धन्यवाद।
के रूप में मैं देख आप 'numBytes' उद्धृत किया, हां, तो आप हमेशा स्थिर – dmitry
की बात कर रहे हैं और आप 'अगर allocationList.has_key ('numBytes')' और 'else' के बाद लाइनों में पेट के छोड़े गए - यह होना चाहिए वाक्यविन्यास त्रुटि – dmitry