在Scala / Java中有没有一种简单,轻松的序列化方法,类似于Python的pickle? Pickle是一个非常简单的解决scheme,它在空间和时间上相当高效(即不是糟糕的),但不关心跨语言的可访问性,版本控制等,并允许可选的定制。 我所知道的是: Java的内置序列化非常慢( [1] , [2] ),臃肿和脆弱。 当有些东西可以清楚地序列化,但是没有注释的时候(比如很less的Point2D作者标记这些Serializable),也必须将类标记为Serializable。 Scala的BytePickle需要大量的样板文件来处理你想要的任何types,即使这样它也不能和(循环)对象图一起工作 。 jserial : 没有维护, 似乎没有那么快/比默认的Java序列化更小 。 kryo : 不能(取消)序列化没有0-参数的对象 ,这是一个严重的限制。 (你也必须注册你计划序列化的每一个课程,否则你会显着减速/膨胀 ,但即使如此,它仍然比腌菜更快。) protostuff :AFAICT,你必须事先在“schema”中注册你想要序列化的每个类。 Kryo和protostuff是我find的最接近的解决scheme,但是我想知道是否还有其他东西(或者如果有一些方法可以使用,我应该知道)。 请包括使用示例! 理想情况下还包括基准。
我正在学习对象序列化的第一次。 我尝试阅读和search模块pickle和搁置的差异,但我不知道我明白这一点。 何时使用哪一个? Pickle可以将每个python对象转换为可以保存到文件中的字节stream。 那么为什么我们需要模块搁置? 不是咸菜更快?
我使用pickle在python 3上转储一个文件,然后使用pickle在python 2上加载文件,出现ValueError。 那么,python 2 pickle不能加载python 3 pickle转储的文件? 如果我想要它? 怎么做?
我正尝试使用pickle模块来保存和加载对象。 首先我宣布我的对象: >>> class Fruits:pass … >>> banana = Fruits() >>> banana.color = 'yellow' >>> banana.value = 30 之后,我打开一个名为“Fruits.obj”的文件(以前我创build了一个新的.txt文件,并将其命名为“Fruits.obj”): >>> import pickle >>> filehandler = open(b"Fruits.obj","wb") >>> pickle.dump(banana,filehandler) 这样做后,我closures我的会议,我开始了一个新的,我把下一个(试图访问它应该保存的对象): file = open("Fruits.obj",'r') object_file = pickle.load(file) 但是我有这个消息: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python31\lib\pickle.py", line 1365, in load encoding=encoding, errors=errors).load() […]
我想创build一个类实例的JSONstring表示,并有困难。 假设这个类是这样构build的: class testclass: value1 = "a" value2 = "b" 调用json.dumps是这样的: t = testclass() json.dumps(t) 这是失败告诉我,testing类不是JSON可序列化。 TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable 我也尝试过使用pickle模块: t = testclass() print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL)) 它给出类实例信息,但不是类实例的序列化内容。 b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.' 我究竟做错了什么?
我已经看过咸菜文档,但是我不明白咸菜的用处。 什么是泡菜的常见用例?
我正在尝试使用multiprocessing的Pool.map()函数来同时分配工作。 当我使用下面的代码,它工作正常: import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() 但是,当我以更面向对象的方式使用它时,它不起作用。 它给出的错误信息是: PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed 这发生在以下是我的主要程序时: import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() 以下是我的someClass类: import multiprocessing class someClass(object): def __init__(self): pass def f(self, x): return […]
我想知道是否有一种方法来加载Python 2.4中使用Python 3.4进行pickle的对象。 我一直在大量的公司遗留代码上运行2to3,以使其更新。 做到这一点,运行文件时,我得到以下错误: File "H:\fixers – 3.4\addressfixer – 3.4\trunk\lib\address\address_generic.py" , line 382, in read_ref_files d = pickle.load(open(mshelffile, 'rb')) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128) 在争用中查看腌制对象,这是一个dict中的dict ,包含键入和strtypes的值。 所以我的问题是:是否有一种方法来加载一个对象,最初在python 2.4,python3.4?
我习惯使用.csv文件将数据导入和导出Python,但是对此有明显的挑战。 任何关于在json或pck文件中存储字典(或字典集)的简单方法的build议? 例如: data = {} data ['key1'] = "keyinfo" data ['key2'] = "keyinfo2" 我想知道如何保存这个,然后如何加载它。
我试图通过networking连接(使用asyncore)传输一个函数。 是否有一个简单的方法来序列化一个Python函数(至less在这种情况下,将不会有副作用)的传输? 我最好喜欢有一对类似于这些function: def transmit(func): obj = pickle.dumps(func) [send obj across the network] def receive(): [receive obj from the network] func = pickle.loads(s) func()