python - 需要帮助从文本文件中检索字典
问题描述
我正在尝试将我创建的字典检索到文本文件中以在控制台中列出它们,但遇到“列表索引超出范围”,这是由列表中的一个值引起的。
这是它在文本文件中的显示方式:
{'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
如果有人能指出我正确的方向来解决这个问题,将不胜感激!谢谢!
解决方案
您似乎正在逐行读取包含一个序列化 JSON 对象的文本文件。
因此,一种有效的方法是像您一样逐行读取文件,并且对于读取的每一行,调用一些 JSON 解析器库来为您完成工作。检查如何做:https ://www.w3schools.com/python/python_json.asp
简而言之,您替换您parse(l)
的 by json.loads(l)
(在导入它之后)调用,这将完全按照您的 parse 函数的目标执行,但会处理所有可能的情况,以及数组。此json.loads
函数将返回一个包含一个人的所有信息的字典对象。
这样做,当然,除非它是一个训练你创建解析器和解析规则的练习。
推荐阅读
- python - 如何在 python 2.7 中使用命名空间包?
- c# - OnCollisionExit 被调用,但行为奇怪
- windows - 如何确定我的系统在一段时间内启动的次数?
- windows - 批处理文件从另一个文件中添加一个文件中的列,第一个字段匹配
- angular - 重构 Observable 以避免类型断言错误
- c# - 转换字典
> 列出 与 concat 键/值 c# - javascript - 从javascript更改顶部div内的文本后div重叠
- css - materialize.css 中的 materialboxed 不起作用
- pyspark - Pyspark:使用窗口函数按日期将数据框保存到单个 csv?
- python - 为什么当我尝试执行登录时,我没有得到下一页的 html