我有一本字典,我把它保存到一个文件中。
a = {'a':1,'b':2,'c':3,'d':4}
with open('testdata.pickle', 'wb') as f:
np.save(f,a)
当我尝试加载它时,它返回为不可读
b = np.load('testdata.pickle',allow_pickle=True)
print(b) #{'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(type(b)) #<class 'numpy.ndarray'>
print(b.shape) #()
print(len(b)) #Traceback (most recent call last):
#File "<stdin>", line 1, in <module>
#TypeError: len() of unsized object
我怎样才能访问这本字典?
尝试直接访问字典也失败。
>>> b['a']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
As juanpa。arrivillaga说,我不应该使用np。save/load。泡菜。倾倒和腌制。负载更好
with open('testdata.pickle', 'wb') as f:
pickle.dump(a, f)
b = pickle.load(open('testdata.pickle','rb'))
print(b) #{'a': 1, 'b': 2, 'c': 3, 'd': 4}
当您执行numpy.load()
时,并且您希望将项目存储在该文件中,则需要使用.item()
。在本例中,您需要b.item()
这是因为numpy将字典存储为数组。将字典保存为numpy对象,默认情况下是数组。你可以使用:
d = b.ravel()[0]
从数组中取出字典。然后可以使用兼容的字典操作。
但是如果你主要是保存和加载字典,我建议你使用pickle。