gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:12:02 25 4
gpt4 key购买 nike

该程序的整体思想是从文本文件中读取数据(使用“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 ,它可以处理例如整数、字符串和 float 的列表和字典。

关于python - 使用literal_eval 将字符串转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com