我有一个包含{姓名:电子邮件地址}
的字典我有一个单独的.py来腌制这个:
emailDict = {'Kilizo': 'info%40kilizo.com' , 'about': 'about%40google.com' }
# write python dict to a file
output = open('orig.pkl', 'wb')
pickle.dump(emailDict, output)
output.close()
有效,因为它将原始字典腌制为orig.pkl
然后在我的主网站上,我有:
# Pickling # Deleting Old Temp & Creating New One
tmp = os.path.isfile("tmp.pkl")
if tmp == True:
os.remove("tmp.pkl")
shutil.copyfile("orig.pkl", "tmp.pkl")
# Pickling # Loading File
pkl_file = open('tmp.pkl', 'rb')
emailDict = pickle.load(pkl_file)
pkl_file.close()
然后,我在网站上有两个表单输入,其中包含电子邮件地址和相应的名称
#Processing input
emailAdded = fs.getvalue('emailAdd')
nameAdded = fs.getvalue('nameAdd')
if emailAdded != None or nameAdded != None:
print emailAdded
print nameAdded
emailDict[nameAdded] = emailAdded
else:
print "Please enter a name & email address"
output = open('tmp.pkl', 'wb')
pickle.dump(emailDict, output)
output.close()
print emailDict
但是,没有新数据存储到tmp.pkl或orig.pkl
让我开始的任何想法?
由于
答案 0 :(得分:2)
让我开始的任何想法?
使用pickle作为网站的动态更新数据存储并不是很好。为了避免并发问题,您必须实现一个锁定文件机制,并希望访问该文件的所有其他内容都会尊重它。
我强烈建议您使用支持并发访问的数据存储。例如。数据库。
阅读:http://en.wikipedia.org/wiki/Concurrency_control
你可以用sqlite轻松开始。看到: http://docs.python.org/library/sqlite3.html
答案 1 :(得分:0)
答案 2 :(得分:0)
python shelve模块负责为您提供类似字典的对象,但是当您提出要求时,它还会对文件进行pickle和存储。正如其他人所说,如果要经常更新,你想使用某种数据库,但为了便于使用,很难击败搁置模块。