18

次の行を含む .txt ファイルがあります。

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入力した が key の値と一致する場合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'

varのキーIDを認識していないようです。関数が実行される前に置くことでハッシュとしてtable2宣言しようとしましたが、引き続きエラー メッセージが表示されます。table2table2 = {}

返されたハッシュの値を変数に割り当てて、それらを使用して出力できるようにするにはどうすればよいkeysですか?

4

4 に答える 4

14

何が起こっているかというと、ファイルの最初の行が探している 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 {}
于 2013-07-18T03:00:01.960 に答える