【发布时间】:2017-05-23 21:00:56
【问题描述】:
我正在使用字典。从不同的资源中,我了解到使用泡菜很舒服。我想使用 pickle 来保存三元组,例如:subject: predicate: object,但稍后我想加载它们并填充一个数组
假设,我的代码:
import pickle
file_name = 'fna.txt'
class DictClass:
def __init__(self, subj, predicate, obj ):
self.subj = subj
self.predicate = predicate
self.obj = obj
def __repr__(self):
return 'DictClass(%r, %r, %r)' % (self.subj, self.predicate, self.obj)
def __eq__(self, other):
return (self.subj == other.subj) and (self.predicate == other.predicate) and (self.obj == other.obj)
data = {'triple': DictClass(17,'subClassOf', 34), 'triple': DictClass(22,'subClassOf', 44)}
print('data:', data)
print('repr(data):', repr(data))
print("data == eval(repr(data), {'DictClass':DictClass})?:", data == eval(repr(data), {'DictClass':DictClass}))
# Load the dictionary back from the pickle file.
def ld_dict(fname):
reader = pickle.load(open(fname, 'rb'))
print(reader)
return True
# Save a dictionary into a pickle file.
def sv_dict(fname):
pickle.dump( data, open( fname, "wb" ) )
return True
if(sv_dict(file_name)):
print('File saved!')
if(ld_dict(file_name)):
print('File loaded!')
一般来说,我想将数据保存在字典中,然后加载它并对其进行一些处理,但我有一个问题。我无法访问加载数据中的信息。在函数ld_dict 中,我试图读取信息并得到结果:
data: {'triple': DictClass(22, 'subClassOf', 44)}
repr(data): {'triple': DictClass(22, 'subClassOf', 44)}
data == eval(repr(data), {'DictClass':DictClass})?: True
File saved!
triple
File loaded!
如何以 JSON 等方式获取信息。如何解析我在这里找到的 JSON (How to parse json data in Python?)。另外,我看到了这个资源:how to save a dictionary in pickle谢谢你的帮助
【问题讨论】:
-
所以你想使用
json而不是pickle? -
我会使用pickle,但当我不使用时,我会看到 JSON
-
对不起,我完全不清楚你在问什么。
-
因为您在循环中打开文件,所以它们只会将最后一个条目存储在数据 dict() 中。在进入循环之前打开文件并在之后关闭它。
-
不要使用循环来保存你的字典。只需保存:pickle.dump(data, file_writemode),然后打开它:reader = pickle.load(file_readmode)
标签: python dictionary