我写了两个脚本Write.py
和Read.py
。
Write.py
在附加模式下打开friends.txt
并获取name
,email
,phone no
的输入,然后使用{{1}将字典转储到文件中方法,这个脚本中的每一件事都可以正常工作。
pickle.dump()
在读取模式下打开Read.py
,然后使用friends.txt
方法将内容加载到字典中,并显示字典的内容。
主要问题是在pickle.load()
脚本中,它只显示旧数据,它从不显示附加数据?
Write.py
Read.py
Read.py
#!/usr/bin/python
import pickle
ans = "y"
friends={}
file = open("friends.txt", "a")
while ans == "y":
name = raw_input("Enter name : ")
email = raw_input("Enter email : ")
phone = raw_input("Enter Phone no : ")
friends[name] = {"Name": name, "Email": email, "Phone": phone}
ans = raw_input("Do you want to add another record (y/n) ? :")
pickle.dump(friends, file)
file.close()
问题一定是什么,代码看起来很好。有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:1)
每次拨打pickle.load
时,您都必须拨打pickle.dump
一次。你编写例程不会在字典中添加一个条目,它会添加另一个字典。您将不得不调用pickle.load
直到读取整个文件,但这将为您提供几个必须合并的字典。更简单的方法是将值存储为CSV格式。这就像
with open("friends.txt", "a") as file:
file.write("{0},{1},{2}\n".format(name, email, phone))
要将值加载到字典中,您可以执行以下操作:
with open("friends.txt", "a") as file:
friends = dict((name, (name, email, phone)) for line in file for name, email, phone in line.split(","))
答案 1 :(得分:1)
您必须多次从文件加载。每个写入过程都会忽略其他写入过程,因此它会创建一个独立于文件中其他数据的固定数据块。如果您之后阅读它,它一次只能读取一个块。所以你可以试试:
import pickle
friend = {}
with open('friends.txt') as f:
while 1:
try:
friend.update(pickle.load(f))
except EOFError:
break # no more data in the file
for person in friend.values():
print '{Name}\t{Email}\t{Phone}'.format(**person)