[英]How to parse pickle dictionary in Python?
我正在用字典。 从不同的资源,我知道使用泡菜很舒服。 我想使用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( 如何在Python中解析JSON数据? )。 另外,我也看到了以下资源: 如何在泡菜中保存字典谢谢您的帮助
评论 :...但是我看不到:'triple':DictClass(17,'subClassOf',34)
示例
data
没有'triple': DictClass(17, 'subClassOf', 34)
,因为示例dict data
无效 !
在按键dict
必须是唯一的 ,您覆盖第一个'triple'
与第二'triple'
。 也许您想要list
而不是dict
。
问题 :我无法将信息访问到加载的数据中。
您将获得相同的 data object
,并将其关联到variable
以成为instance
。
注意 :我在Memory
dumps/loads
,以dump/load
替换以写入/读取文件。
例如,这对我有用:
def print_data(d):
print('data:', d)
print('repr(data):', repr(d))
print("data == eval(repr(data), {'DictClass':DictClass})?:", data == eval(repr(d), {'DictClass':DictClass}))
print('\n')
data = {'triple': DictClass(17, 'subClassOf', 34), 'triple': DictClass(22, 'subClassOf', 44)}
print_data(data)
#pickle.dump( data, open( fname, "wb" ) )
data_pickeld = pickle.dumps( data )
#data_unpickeld = pickle.load(open(fname, 'rb'))
data_unpickeld = pickle.loads( data_pickeld)
print_data(data_unpickeld)
输出 :
数据:{'triple':DictClass(22,'subClassOf',44)}
repr(资料):{'triple':DictClass(22,'subClassOf',44)}
数据== eval(repr(数据),{'DictClass':DictClass})?:真数据:{'triple':DictClass(22,'subClassOf',44)}
repr(资料):{'triple':DictClass(22,'subClassOf',44)}
数据== eval(repr(数据),{'DictClass':DictClass})?:真
使用Python测试:3.4.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.