作为一个初学者,我正在尝试使用保存在名为contacts.txt的文本文件中的字典编写联系人列表程序,以存储数据。为了更新我的联系人字典,我可以使用contacts.update(dict2 ),dict2是新联系人的输入数据。香港专业教育学院尝试下面的代码,但它不起作用:
new_entry = {}
# contacts = {}
contacts = contacts_file = open("contacts.txt", 'a+')
def data():
cell = input("Enter cell number: ")
first = input("Enter first name: ")
last = input("Enter last name: ")
new_entry = {cell: (first, last)}
print("NEW ENTRY:" + str(new_entry))
data()
contacts.update(new_entry)
print("CONTACTS: " + str(contacts))
def write_to_file():
contacts_file = open("contacts.txt", 'w')
contacts_file.write(str(contacts))
contacts_file.close()
write_to_file()
我的想法是将变量“联系人”分配给保存在文本文件中的字典。最初,字典将为空,但每次输入新的联系方式时,它将使用新数据填充。
但是出现错误:AttributeError:运行程序时,'_io.TextIOWrapper'对象没有属性'update'。
显然问题出在这里:
contacts = contacts_file = open("contacts.txt", 'a+')
我想将文本文件上的字典分配给可变联系人,以便通过new_entry更新联系人,并且通过覆盖原始字典将更新后的联系人字典再次保存到文本文件中。
如果我将联系人分配给一个空的字典,它也将不起作用,因为每次程序运行时,新数据都会被添加到一个空的字典中。
我在做什么错了?
谢谢
安德烈
答案 0 :(得分:0)
文件中没有dict
(或任何其他Python对象)之类的东西。您可能具有字符串表示形式。您需要打开文件,反序列化对象,更新它,然后对其进行序列化并将其写回到文件中。例如,使用json
:
import json
with open('some_file') as f:
deserialized_object = json.load(f)
deserialized_object['key_to_update'] = 'updated_value'
serialized_object = json.dumps(deserialized_object)
f.seek(0)
f.write(serialized_object)
f.truncate()