簡體   English   中英

Python Pickle不存儲數據

[英]Python Pickle Not Storing Data

我有一個包含{姓名:電子郵件地址}的字典

我有一個單獨的.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

有什么想法讓我開始?

謝謝

有什么想法讓我開始?

使用pickle作為網站的動態更新數據存儲並不是很好。 為了避免並發問題,您必須實現一個鎖定文件機制,並希望訪問該文件的所有其他內容都會尊重它。

我強烈建議您使用支持並發訪問的數據存儲。 例如數據庫。

閱讀: http//en.wikipedia.org/wiki/Concurrency_control


你可以用sqlite輕松開始。 請參閱: http//docs.python.org/library/sqlite3.html

MattH是對的,你絕對不應該使用pickle作為數據庫的替代品。 我建議使用類似mongo的東西,因為它使存儲字典變得輕而易舉。 我發現pymongo真的很容易使用,並且沒有問題。

python shelve模塊負責為您提供類似字典的對象,但是當您提出要求時,它還會將對象存儲並存儲到文件中。 正如其他人所說,如果要經常更新,你想使用某種數據庫,但為了易於使用,很難擊敗擱置模塊。

http://docs.python.org/library/shelve.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM