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'

似乎它没有识别varID上的键。table2我还尝试通过在执行函数之前将其声明table2为哈希table2 = {},但它继续显示错误消息。

如何将返回的哈希值分配给变量,以便我可以使用它们的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 回答
1

def query(id):
    for line in file:
        table = line.split(";")
        if id == int(table[0]):
             yield table
    
    

id = int(input("Enter the ID of the user: "))
for id_, name, city in query(id):
  print("ID: " + id_)
  print("Name: " + name)
  print("City: " + city)
file.close()

使用产量..

于 2021-02-17T15:17:00.193 回答
0
def prepare_table_row(row):
    lst = [i.text for i in row if i != u'\n']
    return dict(rank = int(lst[0]),
                grade = str(lst[1]),
                channel=str(lst[2])),
                videos = float(lst[3].replace(",", " ")),
                subscribers = float(lst[4].replace(",", "")),
                views = float(lst[5].replace(",", "")))
于 2020-02-10T21:41:14.550 回答
-1

我按照下面代码中所示的方法返回字典。创建了一个类并将字典声明为全局,并创建了一个函数来添加对应于字典中某些键的值。

**注意已使用 Python 2.7,因此 Python 3+ 可能需要进行一些小的修改

class a:
    global d
    d={}
    def get_config(self,x):
        if x=='GENESYS':
            d['host'] = 'host name'
            d['port'] = '15222'
        return d

在单独的 python 文件中使用类实例调用 get_config 方法:

from constant import a
class b:
    a().get_config('GENESYS')
    print a().get_config('GENESYS').get('host')
    print a().get_config('GENESYS').get('port')
于 2019-02-24T15:03:52.987 回答