已回答无论如何我最终还是选择了咸菜
好的,关于另一个问题的一些建议我问我被告知使用pickle将字典保存到文件中。
我试图保存到该文件的字典是
members = {'Starspy' : 'SHSN4N', 'Test' : 'Test1'}
当pickle将其保存到文件中时......这是格式
(dp0
S'Test'
p1
S'Test1'
p2
sS'Test2'
p3
S'Test2'
p4
sS'Starspy'
p5
S'SHSN4N'
p6
s.
你能给我另一种方法将字符串保存到文件中吗?
这是我希望将其保存在
中的格式members = {'Starspy':'SHSN4N','测试':'测试1'}
完整代码:
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")
答案 0 :(得分:60)
当然,请将其另存为CSV:
import csv
w = csv.writer(open("output.csv", "w"))
for key, val in dict.items():
w.writerow([key, val])
然后阅读它将是:
import csv
dict = {}
for key, val in csv.reader(open("input.csv")):
dict[key] = val
另一种选择是json(json
版本2.6+,或安装simplejson
2.5及以下版本):
>>> import json
>>> dict = {"hello": "world"}
>>> json.dumps(dict)
'{"hello": "world"}'
答案 1 :(得分:53)
目前最常见的序列化格式是JSON,它受到普遍支持,并且非常清楚地表示像字典这样的简单数据结构。
>>> members = {'Starspy' : 'SHSN4N', 'Test' : 'Test1'}
>>> json.dumps(members)
'{"Test": "Test1", "Starspy": "SHSN4N"}'
>>> json.loads(json.dumps(members))
{u'Test': u'Test1', u'Starspy': u'SHSN4N'}
答案 2 :(得分:7)
答案 3 :(得分:7)
虽然与pp.pprint(the_dict)
不同,它不会那么漂亮,会一起运行,str()
至少可以让一个字典以简单的方式保存,以便快速完成任务:
f.write( str( the_dict ) )
答案 4 :(得分:3)
我试一试。如何指定要将其转储到/从中加载的文件?
除了写入字符串外,json
模块提供了一个dump()
- 方法,该方法写入文件:
>>> a = {'hello': 'world'}
>>> import json
>>> json.dump(a, file('filename.txt', 'w'))
>>> b = json.load(file('filename.txt'))
>>> b
{u'hello': u'world'}
也有load()
方法可供阅读。
答案 5 :(得分:0)
虽然我建议pickle
,但如果您想要替代方案,可以使用klepto
。
>>> init = {'y': 2, 'x': 1, 'z': 3}
>>> import klepto
>>> cache = klepto.archives.file_archive('memo', init, serialized=False)
>>> cache
{'y': 2, 'x': 1, 'z': 3}
>>>
>>> # dump dictionary to the file 'memo.py'
>>> cache.dump()
>>>
>>> # import from 'memo.py'
>>> from memo import memo
>>> print memo
{'y': 2, 'x': 1, 'z': 3}
使用klepto
,如果您使用了serialized=True
,那么字典就会被写为memo.pkl
作为腌制词典,而不是明文。
您可以在此处klepto
获取https://github.com/uqfoundation/klepto
dill
可能是对pickle
本身进行挑选的更好选择,因为dill
几乎可以在python中序列化任何内容。 klepto
也可以使用dill
。
您可以在此处dill
获取https://github.com/uqfoundation/dill