2013-07-18 86 views
5

我對此非常有如下的.txt文件:如何返回字典| Python的

23;Pablo;SanJose 
45;Rose;Makati 

我有這樣的程序:

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"]) 

那麼是什麼(據我)發生的事情是:

文件打開 創建一個名爲table的散列,並將文件的每一行分割成3個鍵/值。 如果用戶輸入的id與密鑰ID的值匹配,則關閉文件 並返回整個散列。

然後,我將table2的值分配給table散列值,並試圖在其中打印值。

當我運行它,我得到如下:

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 VAR識別關鍵ID。我還嘗試在函數執行前通過放入table2 = {}來聲明table2作爲散列,但它繼續顯示錯誤消息。

如何將返回散列的值賦給變量,以便我可以使用它們的keys打印它們?

+1

你爲什麼只看文件的第一行? – user2357112

+0

我不明白你的意思,我正在使用for循環來查看文件的所有行。 – pgonzaleznetwork

+1

無論如何,在第一次迭代中你都會返回,然後你有機會看第二行。 – user2357112

回答

8

發生什麼事是你在文件的第一行與你正在查找的ID不匹配後立即返回。你必須這樣做:

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