首页 > 解决方案 > 需要帮助从文本文件中检索字典

问题描述

我正在尝试将我创建的字典检索到文本文件中以在控制台中列出它们,但遇到“列表索引超出范围”,这是由列表中的一个值引起的。

这是它在文本文件中的显示方式:

{'Email': 'jbond@gmail.com', 'First Name': 'James', 'Last Name': 'Bond', 'Department': 'HR', 'Position': 'Manager', 'Salary': 50000.0, 'Skills': ['Organizer', 'speech']}
{'Email': 'jdoe@gmail.com', 'First Name': 'Jane', 'Last Name': 'Doe', 'Department': 'IT', 'Position': 'Help Desk', 'Salary': 35000.0, 'Skills': ['Troubleshooting']}
{'Email': 'johnd@gmail.com', 'First Name': 'John', 'Last Name': 'Doe', 'Department': 'IT', 'Position': 'Manager', 'Salary': 80000.0, 'Skills': ['Troubleshooting', 'Managing']}

尝试检索信息以显示所有信息以及能够仅为一个人检索信息(尚未开始,因为还没有想出如何检索和显示所有人)

我创建了一个解析函数和另一个调用它来显示信息的函数。这是这两个函数的代码。

def viewEmployees():
    f = open("sample.txt", 'rt')
    lines = f.read().split('\n')
    for l in lines:
        if l != '':
            employee_list = parse(l)
            print(employee_list)
    f.close()

def parse(d):
    dictionary = dict()

    pairs = d.strip('{}').split(', ')
    for i in pairs:
        pair = i.split(': ')

        dictionary[pair[0].strip('\'\'"\"')] = pair[1].strip('\'\'"\"')
    return dictionary

viewEmployees()

我想要的输出至少像在文本文件中一样显示出来。如果我能找到一种方法让它看起来像这样,那就太酷了。

Email: jbond@gmail.com
First Name: James
Last Name: Bond
Department: HR
Position: Manager
Salary: 50000.00
Skills: Organizer, Speech

Email: jdoe@gmail.com
First Name: Jane
Last Name: Doe
Department: IT
Position: Help Desk
Salary: 35000.00
Skills: Troubleshooting

这是我收到的错误消息:

Traceback (most recent call last):
  File "d:\OneDrive\Desktop\sample.py", line 20, in <module>       
    viewEmployees()
  File "d:\OneDrive\Desktop\sample.py", line 6, in viewEmployees   
    employee_list = parse(l)
  File "d:\OneDrive\Desktop\sample.py", line 17, in parse
    dictionary[pair[0].strip('\'\'"\"')] = pair[1].strip('\'\'"\"')
IndexError: list index out of range

如果有人能指出我正确的方向来解决这个问题,将不胜感激!谢谢!

标签: python

解决方案


您似乎正在逐行读取包含一个序列化 JSON 对象的文本文件。

因此,一种有效的方法是像您一样逐行读取文件,并且对于读取的每一行,调用一些 JSON 解析器库来为您完成工作。检查如何做:https ://www.w3schools.com/python/python_json.asp

简而言之,您替换您parse(l)的 by json.loads(l)(在导入它之后)调用,这将完全按照您的 parse 函数的目标执行,但会处理所有可能的情况,以及数组。此json.loads函数将返回一个包含一个人的所有信息的字典对象。


这样做,当然,除非它是一个训练你创建解析器和解析规则的练习。


推荐阅读