Answered I ended up going with pickle at the end anyway
Ok so with some advice on another question I asked I was told to use pickle to save a dictionary to a file.
The dictionary that I was trying to save to the file was
members = {'Starspy' : 'SHSN4N', 'Test' : 'Test1'}
When pickle saved it to the file... this was the format
(dp0
S'Test'
p1
S'Test1'
p2
sS'Test2'
p3
S'Test2'
p4
sS'Starspy'
p5
S'SHSN4N'
p6
s.
Can you please give me an alternative way to save the string to the file?
This is the format that I would like it to save in
members = {'Starspy' : 'SHSN4N', 'Test' : 'Test1'}
Complete Code:
import sys
import shutil
import os
import pickle
tmp = os.path.isfile("members-tmp.pkl")
if tmp == True:
os.remove("members-tmp.pkl")
shutil.copyfile("members.pkl", "members-tmp.pkl")
pkl_file = open('members-tmp.pkl', 'rb')
members = pickle.load(pkl_file)
pkl_file.close()
def show_menu():
os.system("clear")
print "\n","*" * 12, "MENU", "*" * 12
print "1. List members"
print "2. Add member"
print "3. Delete member"
print "99. Save"
print "0. Abort"
print "*" * 28, "\n"
return input("Please make a selection: ")
def show_members(members):
os.system("clear")
print "\nNames", " ", "Code"
for keys in members.keys():
print keys, " - ", members[keys]
def add_member(members):
os.system("clear")
name = raw_input("Please enter name: ")
code = raw_input("Please enter code: ")
members[name] = code
output = open('members-tmp.pkl', 'wb')
pickle.dump(members, output)
output.close()
return members
#with open("foo.txt", "a") as f:
# f.write("new line\n")
running = 1
while running:
selection = show_menu()
if selection == 1:
show_members(members)
print "\n> " ,raw_input("Press enter to continue")
elif selection == 2:
members == add_member(members)
print members
print "\n> " ,raw_input("Press enter to continue")
elif selection == 99:
os.system("clear")
shutil.copyfile("members-tmp.pkl", "members.pkl")
print "Save Completed"
print "\n> " ,raw_input("Press enter to continue")
elif selection == 0:
os.remove("members-tmp.pkl")
sys.exit("Program Aborted")
else:
os.system("clear")
print "That is not a valid option!"
print "\n> " ,raw_input("Press enter to continue")
The most common serialization format for this nowadays is JSON, which is universally supported and represents simple data structures like dictionaries very clearly.
You asked
Apart from writing to a string, the
json
module provides adump()
-method, which writes to a file:There is a
load()
method for reading, too.While I'd suggest
pickle
, if you want an alternative, you can useklepto
.With
klepto
, if you had usedserialized=True
, the dictionary would have been written tomemo.pkl
as a pickled dictionary instead of with clear text.You can get
klepto
here: https://github.com/uqfoundation/kleptodill
is probably a better choice for pickling thenpickle
itself, asdill
can serialize almost anything in python.klepto
also can usedill
.You can get
dill
here: https://github.com/uqfoundation/dillThe YAML format (via pyyaml) might be a good option for you:
http://en.wikipedia.org/wiki/Yaml
http://pypi.python.org/pypi/PyYAML
Although, unlike
pp.pprint(the_dict)
, this won't be as pretty, will be run together,str()
at least makes a dictionary savable in a simple way for quick tasks:Sure, save it as CSV:
Then reading it would be:
Another alternative would be json (
json
for version 2.6+, or installsimplejson
for 2.5 and below):