繁体   English   中英

如何在Python中解析pickle词典?

[英]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.

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