我正在尝试从以下问题重新创建简单的泡菜图示例:保存交互式Matplotlib图,该图也源于使用Pickle保存Matplotlib图。但是,当我运行给定的代码时,这些数字似乎可以腌制,但是当我尝试加载该腌制的图形时出现错误。我正在使用Canopy
Enthought(v1.6.2.3262),在Python 2.7.3-1上使用Matplotlib 1.5.1-1和Numpy
1.9.2-3来运行它。泡菜代码是:
import numpy as np
import matplotlib.pyplot as plt
import pickle as pl
# Plot simple sinus function
fig_handle = plt.figure()
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
# Save figure handle to disk
pl.dump(fig_handle,file('sinus.pickle','w'))`
加载该图的代码是:
import matplotlib.pyplot as plt
import pickle as pl
import numpy as np
# Load figure from disk and display
fig_handle = pl.load(open('sinus.pickle','rb'))
fig_handle.show()
我得到的错误是:
%run "Z:\EFNHigh_Res\show_picklefig.py"
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
Z:\EFNHigh_Res\show_picklefig.py in <module>()
4
5 #plot simple sinus function
----> 6 fig_handle = pl.load(open('Z:\EFNHigh_Res\sinus.pickle','rb'))
7 fig_handle.show()
C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in load(file)
1376
1377 def load(file):
-> 1378 return Unpickler(file).load()
1379
1380 def loads(str):
C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in load(self)
856 while 1:
857 key = read(1)
--> 858 dispatch[key](self)
859 except _Stop, stopinst:
860 return stopinst.value
C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in load_global(self)
1088 module = self.readline()[:-1]
1089 name = self.readline()[:-1]
-> 1090 klass = self.find_class(module, name)
1091 self.append(klass)
1092 dispatch[GLOBAL] = load_global
C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in find_class(self, module, name)
1122 def find_class(self, module, name):
1123 # Subclasses may override this
-> 1124 __import__(module)
1125 mod = sys.modules[module]
1126 klass = getattr(mod, name)
ImportError: No module named copy_reg
我知道Python 3和2之间存在区别,因为在Python
2的转储中应该使用该文件而不是open(并且我认为是pickle加载),因此我在代码中尝试了两种组合。
我不确定错误告诉我什么,所以我无法进一步了解该错误,也无法帮助您理解错误或解决已解决的问题。
copy_reg错误是由代码中的腌制图格式引起的,正确的代码应在写语句中包含wb而不是w,如下所示:
# Save figure handle to disk
import pickle
with open('sinus.pickle', 'wb') as f: # should be 'wb' rather than 'w'
pickle.dump(fig_handle, f)
这是根据copy_reg错误和另一个问题ImportError中提供的解决方案来识别的:Import_ample:酸洗时没有关于copy_reg错误的名为copy_reg
pickle的模块
。
问题内容: 我需要将一个键为类型且值为s 的小对象保存到磁盘 ,然后将其恢复 。像这样: 最佳选择是什么,为什么?使用或使用序列化它? 我正在使用Python 2.6。 问题答案: 如果您没有任何互操作性要求(例如,您将仅使用Python使用数据)并且二进制格式很好,请使用cPickle,它将为您提供真正快速的Python对象序列化。 如果您希望互操作性或想要一种文本格式来存储数据,请使用JSON
问题内容: 要学习tkinter,我正在制作一个简单的Go游戏程序。我现在希望能够使用泡菜保存游戏,但是当我尝试泡菜时,我得到: 我猜这是由于以下事实:尽管GUI和go board的模型被很好地分开了,但是该模型仍然具有对视图的引用以推送某些内容,因此pickle可能会尝试腌制一些tk的内容。当然,我只想对模型进行腌制,是否有任何方法可以使腌制不在乎对GUI的引用?还是解决该问题的另一种方法? 我
Pandas中的应该是的替代品。 根据Pandas在MsgPack上的文档: 这是一种轻量级的可移植二进制格式,类似于二进制JSON,具有高度的空间效率,在写入(序列化)和读取(反序列化)方面都提供了良好的性能。 然而,我发现它的性能似乎无法与泡菜相提并论。 问题:除了pickle潜在的安全问题之外,msgpack比pickle有什么好处?pickle仍然是序列化数据的首选方法,还是目前存在更好的
本文向大家介绍matplotlib 创建人物,包括了matplotlib 创建人物的使用技巧和注意事项,需要的朋友参考一下 示例 该图包含所有绘图元素。创建图形的主要方法matplotlib是使用pyplot。 您可以选择提供一个数字,该数字可用于访问先前创建的图形。如果未提供数字,则最后创建的图形的ID将增加并使用;数字从1开始索引,而不是0。 数字也可以用字符串代替数字,而不是数字。如果使用交
问题内容: 我一直在使用pickle感到非常高兴,然后我看到了这篇文章:不要为您的数据腌制 进一步阅读似乎是: 泡菜慢 泡菜不安全 泡菜不是人类可读的 泡菜不是与语言无关的 我已将数据保存为JSON,但我想了解最佳做法: 考虑到所有这些问题,您何时会使用泡菜?需要使用哪种特定情况? 问题答案: Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。但是,这也使它可以序列化几乎所
问题内容: 我创建了一些数据并将其存储了几次,如下所示: 每次文件大小增加,但是当我打开文件时 我只能看到上次的数据。如何正确读取文件? 问题答案: Pickle一次序列化一个对象,然后读回一个对象-腌制的数据按顺序记录在文件上。 如果您只是简单地这样做,则应该读取序列化到文件中的第一个对象(而不是您编写的最后一个对象)。 对第一个对象进行反序列化后,文件指针位于下一个对象的开头-如果您再次调用,