2013-07-18 21 views
5

Mam plik .txt z następujących linii w nim:Jak zwrócić słownik | Python

23;Pablo;SanJose 
45;Rose;Makati 

mam ten program:

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

Więc co się dzieje (według mnie) jest:

pliku zostanie otwarty Utworzono hasz nazwany table, a każdy wiersz pliku podzielony jest na 3 klucze/wartości. Jeśli wprowadzony przez użytkownika id pasuje do wartości klucza ID, zamknij plik i zwróć cały skrót.

Następnie przypisuję wartości table2 do wartości mieszania table i próbuję wydrukować w niej wartości.

Gdy uruchomię to uzyskać następujące:

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' 

Wydaje się, że to nie uznając kluczową ID na table2 var. Próbowałem również zadeklarować table2 jako skrót, umieszczając table2 = {} przed wykonaniem funkcji, ale nadal wyświetla komunikat o błędzie.

Jak przypisać wartości zwróconego skrótu do zmiennej, aby można było je wydrukować przy użyciu ich wartości keys?

+1

Dlaczego patrzysz tylko na pierwszą linię pliku? – user2357112

+0

Nie rozumiem, co masz na myśli, używam pętli for, aby przejrzeć wszystkie wiersze pliku. – pgonzaleznetwork

+1

Powrócisz w pierwszej iteracji bez względu na wszystko, zanim będziesz mógł spojrzeć na drugą linię. – user2357112

Odpowiedz

8

Co się dzieje, że powracasz zaraz po tym, jak pierwszy wiersz pliku nie pasuje do poszukiwanego identyfikatora. Musisz to zrobić:

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

Dziękuję wszystkim. Nie zdawałem sobie sprawy, że zamykałem plik jako część pętli, czyniąc plik nieczytelnym po pierwszym wierszu (jeśli dobrze zrozumiałem). Jeszcze raz dziękuję, bardzo się cieszę. – pgonzaleznetwork

Powiązane problemy