简体   繁体   中英

Python Pickle Not Storing Data

I have a dictionary containing { Name : Email Address }

I have a seperate .py to pickle this:

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()

which works, in that it pickles the original dictionary to orig.pkl

Then in my main website, i have:

# 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()

I then have two form inputs on a website that take the email address and corresponding name

#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

However no new data gets stored to either tmp.pkl or orig.pkl

Any ideas to get me started?

Thanks

Any ideas to get me started?

Using pickle as a dynamically updated data store for a website isn't great. In order to avoid concurrency issues you'll have to implement a lockfile mechanism and hope that everything else that accesses the file will respect it.

I strongly suggest that you use a data store that supports concurrent access. Eg a database.

Have a read of: http://en.wikipedia.org/wiki/Concurrency_control


You could start easy with sqlite. See: http://docs.python.org/library/sqlite3.html

MattH is right, you definitely should NOT use pickle as a database replacement. I suggest using something like mongo since it makes storing dictionaries as breeze. I've found pymongo is real easy to use and slurps up dictionaries no problem.

The python shelve module takes care of giving you a dictionary-like object, but also pickles and stores objects to a file when you ask it to. As others have said, if it is going to be updated very often you want to use some sort of database but it is hard to beat the shelve module for ease of use.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM