我正在使用字典。从不同的资源,我明白使用泡菜很舒服。我想使用pickle保存三元组,例如: > data3
Maui8 Maui7 Maui6 Olowalu Maalaea
1 1.01532397 0.7583463 -1.45102480 0.37355214 0.093384619
2 0.84997103 0.7802248 -1.47906584 0.57370139 0.000741584
3 0.65297103 0.9325412 -1.31256709 0.29211557 0.077706758
4 0.42029456 0.8041302 -1.36599992 0.15763796 0.018583624
5 0.15063769 0.5932333 -1.00933326 -0.03478742 0.073490340
6 0.14522593 0.4739607 -0.82896012 0.22469641 0.226357256
7 0.03779456 0.4774847 -0.09524122 0.42900612 0.194261484
8 -0.39651917 -0.2433839 0.07535580 -0.03204488 0.384578649
9 -0.99220544 -1.3080379 0.07143167 -0.57821403 0.012594818
10 -1.58116623 -1.3739277 -0.28876112 -1.34129239 -0.543698715
11 -1.68365642 -1.5527201 0.35511326 -0.99125508 -0.574656426
12 -1.67555838 -1.6044574 0.21679237 -1.05519787 -0.731770854
13 -1.64012701 -1.6975577 0.68442918 -1.20809587 -0.888636526
14 -1.22618583 -1.3975012 0.94365182 -0.84284090 -0.611341749
15 -1.12916623 -0.8248387 1.05953344 -0.86989314 -0.242448715
16 -1.11394684 -0.3294150 1.41744881 -0.45954904 -0.331766245
17 -0.41821140 -0.4312582 1.19811924 -0.45322699 -0.384893352
18 0.22428860 -0.2696410 1.14340119 -0.28008162 -0.323007387
19 0.69397114 -0.1249800 1.12954154 0.48571412 0.074298377
20 1.55118345 1.1953590 0.91711047 1.47251236 0.802606648
21 1.76527075 1.6837135 0.50540620 1.30325798 0.951992613
22 1.34356440 1.6247940 -0.09836573 1.21764394 0.794730708
23 1.59601480 0.9492149 -0.69564643 0.87988078 0.490006397
24 1.41023107 0.8847163 -1.09236948 0.73676048 0.436886096
> ACF<-acf(data3)
> plot(ACF, type="l", max.mfrow=1)
> lines(ACF$acf[-1, 2,3], lty=1, col="red", lwd=1)
> lines(ACF$acf[-1, 2,4], lty=1, col="green", lwd=1)
,但后来我想加载它们并填充一个数组
假设,我的代码:
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
我如何获取信息,例如JSON。如何解析我在这里找到的JSON(How to parse json data in Python?)。另外,我已经看到了这个资源:how to save a dictionary in pickle感谢您的帮助
答案 0 :(得分:1)
评论:...但我看不到:'triple':DictClass(17,'subClassOf',34)
您的示例
'triple': DictClass(17, 'subClassOf', 34)
中有否data
,因为您的示例dict data
无效!
dict
中的键必须唯一,您使用第二<覆盖第一个'triple'
/ strong>'triple'
。也许你想要list
而不是dict
。
问题:我无法访问已加载数据的信息。
您返回相同 data object
,将variable
加入instance
。
注意强>: 我在内存
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)
<强>输出强>:
data:{'triple':DictClass(22,'subClassOf',44)}
repr(data):{'triple':DictClass(22,'subClassOf',44)}
data == eval(repr(data),{'DictClass':DictClass})?:True数据:{'triple':DictClass(22,'subClassOf',44)}
repr(data):{'triple':DictClass(22,'subClassOf',44)}
data == eval(repr(data),{'DictClass':DictClass})?:True
使用Python测试:3.4.2