2013-07-18 10 views
5

मैं इसमें निम्नलिखित लाइनों के साथ एक .txt फ़ाइल है:शब्दकोश को वापस कैसे करें अजगर

file = open("C:/Users/renato/Desktop/HTML Files/myfile2.txt") 

def query(id): 
    for line in file: 
     table = {} 
     (table["ID"],table["name"],table["city"]) = line.split(";") 
     if id == int(table["ID"]): 
      file.close() 
      return table 
     else: 
      file.close() 
      return {} 

id = int(input("Enter the ID of the user: ")) 
table2 = query(id) 
print("ID: "+table2["ID"]) 
print("Name: "+table2["name"]) 
print("City: "+table2["city"]) 

तो क्या हुआ (मेरे हिसाब से) हो रहा है है:

फ़ाइल

23;Pablo;SanJose 
45;Rose;Makati 

मैं इस कार्यक्रम है खोला गया है table नामक हैश बनाया गया है और फ़ाइल की प्रत्येक पंक्ति को 3 कुंजी/मानों में विभाजित किया गया है। यदि उपयोगकर्ता द्वारा दर्ज किया गया id कुंजी ID के मान से मेल खाता है, तो फ़ाइल फ़ाइल बंद करें और पूरे हैश को वापस करें।

फिर, मैं table2table हैश पर मान निर्दिष्ट कर रहा हूं और मैं इसमें मूल्यों को मुद्रित करने का प्रयास कर रहा हूं।

Traceback (most recent call last): 
    File "C:/Users/renato/Desktop/HTML Files/Python/hash2.py", line 17, in <module> 
    print("ID: "+table2["ID"]) 
    KeyError: 'ID' 

ऐसा लगता है जैसे कि यह table2 वर पर कुंजी ID पहचानने नहीं कर रहा है:

जब मैं इस चलाने के लिए, मैं निम्नलिखित मिलता है। मैंने फ़ंक्शन निष्पादित होने से पहले table2 = {} डालकर table2 को हैश के रूप में घोषित करने का भी प्रयास किया, लेकिन यह त्रुटि संदेश प्रदर्शित करना जारी रखता है।

मैं एक परिवर्तनीय हैश के मानों को एक चर में कैसे आवंटित करूं, ताकि मैं उन्हें keys का उपयोग करके प्रिंट कर सकूं?

+1

आप केवल फ़ाइल की पहली पंक्ति क्यों देख रहे हैं? – user2357112

+0

मुझे समझ में नहीं आता कि आपका क्या मतलब है, मैं फाइल के सभी लाइनों को देखने के लिए लूप के लिए उपयोग कर रहा हूं। – pgonzaleznetwork

+1

आप दूसरी बार देखने का मौका मिलने से पहले, पहले पुनरावृत्ति में वापस आते हैं, इससे कोई फर्क नहीं पड़ता। – user2357112

उत्तर

8

क्या हो रहा है कि आप फ़ाइल की पहली पंक्ति के ठीक बाद लौट रहे हैं, जिस आईडी को आप ढूंढ रहे हैं उससे मेल नहीं खाता है। आपको यह करना है:

def query(id): 
    for line in file: 
     table = {} 
     (table["ID"],table["name"],table["city"]) = line.split(";") 
     if id == int(table["ID"]): 
      file.close() 
      return table 
    # ID not found; close file and return empty dict 
    file.close() 
    return {} 
+0

आप सभी को धन्यवाद। मुझे एहसास नहीं हुआ था कि मैं लूप के हिस्से के रूप में फ़ाइल बंद कर रहा था, जिससे फ़ाइल पहली पंक्ति के बाद अपठनीय हो गई (अगर मैं सही ढंग से समझ गया)। फिर से धन्यवाद, बहुत सराहना की। – pgonzaleznetwork

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