繁体   English   中英

使用literal_eval将字符串转换为字典

[英]Converting a string into a dictionary using literal_eval

该程序的整体思想是从文本文件中读取数据(使用“ for”循环从字典中将其保存为字符串),然后将该内容重新插入字典中。 之后,程序继续要求输入(名称和编号)并将其添加到字典中。

我已经使用“ ast.literal_eval”将字符串转换为字典,如下所示:

import ast

f = open("resources/contacts.txt", "r+")
contactlist = f.read() # converting the string into a dictionary starts here
contactlist = ast.literal_eval(contactlist) # and ends here
print(contactlist) # for debugging purposes 

answer = 'again'

while answer == 'again':
    contact = input("enter a contact name: ")
    contactnum = input("enter the contact's number: ")
    contactlist[contact]= contactnum
    answer = input("again or stop: ")

f = open("resources/contacts.txt", "r+")

for item in contactlist:
    f.write(item + contactlist[item])

print(f.read())
f.close()

这引发了错误:

Traceback (most recent call last):
  File "D:\Code\Python\Projects\Contacts.py", line 5, in <module>
    contactlist = ast.literal_eval(contactlist)
  File "D:\Code\Python\PYTHON\lib\ast.py", line 84, in literal_eval
    return _convert(node_or_string)
  File "D:\Code\Python\PYTHON\lib\ast.py", line 83, in _convert
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Name object at 0x02F52B10>

根据我对这个错误的发现,它不接受特定范围之外的任何值类型,但是我的应该被接受。 我迷路了,我已经搜索了许多相关的主题,但是找不到解决方法。

您有类似的字典:

{'Name': '00000000'}

当您写出来时:

for item in contactlist:
    f.write(item + contactlist[item])

您的文件是:

Name00000000

无法使用ast.literal_eval解析-它不再“看起来像” Python字典。 而是写出整个字典的字符串表示形式:

f.write(str(contactlist))

那么文件的内容实际上看起来像是字典:

{'Name': '00000000'}

您可以将其评估回​​字典。

另外,研究一下pickle ,它可以创建任意Python数据结构的平面文件表示形式; json可以处理例如整数,字符串和浮点数的列表和字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM