标签: pickle

如何使用泡菜来保存字典?

我查看了Python文档提供的信息,但我仍然有点困惑.有人可以发布编写新文件的示例代码,然后使用pickle将字典转储到其中吗?

python dictionary pickle

304
推荐指数
7
解决办法
33万
查看次数

Python多处理PicklingError:无法pickle <type'function'>

很抱歉,我无法用更简单的示例重现错误,而且我的代码太复杂而无法发布.如果我在IPython shell而不是常规Python中运行程序,那么事情就会很顺利.

我查看了之前关于这个问题的一些注意事项.它们都是由在类函数中定义的pool to call函数引起的.但对我来说情况并非如此.

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助.

更新:我挑选的功能是在模块的顶层定义的.虽然它调用包含嵌套函数的函数.即f()要求g()调用h()具有嵌套函数i(),和我打电话pool.apply_async(f).f(),g(),h()都在顶层定义.我用这个模式尝试了更简单的例子,但它确实有效.

python pickle multiprocessing python-multiprocessing

217
推荐指数
6
解决办法
19万
查看次数

使用pickle.dump - TypeError:必须是str,而不是bytes

我正在使用python3.3并且在尝试挑选一个简单的字典时遇到了一个神秘的错误.

这是代码:

import os
import pickle
from pickle import *
os.chdir('c:/Python26/progfiles/')

def storvars(vdict):      
    f = open('varstor.txt','w')
    pickle.dump(vdict,f,)
    f.close()
    return

mydict = {'name':'john','gender':'male','age':'45'}
storvars(mydict)
Run Code Online (Sandbox Code Playgroud)

我得到:

Traceback (most recent call last):
  File "C:/Python26/test18.py", line 31, in <module>
    storvars(mydict)
  File "C:/Python26/test18.py", line 14, in storvars
    pickle.dump(vdict,f,)
TypeError: must be str, not bytes
Run Code Online (Sandbox Code Playgroud)

python pickle python-3.x

210
推荐指数
2
解决办法
7万
查看次数

使用多处理Pool.map()时无法pickle <type'instancemethod'>

我想使用multiprocessingPool.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()
Run Code Online (Sandbox Code Playgroud)

但是,当我在面向对象的方法中使用它时,它不起作用.它给出的错误信息是:

PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Run Code Online (Sandbox Code Playgroud)

当以下是我的主程序时会发生这种情况:

import someClass

if __name__== '__main__' :
    sc = someClass.someClass()
    sc.go()
Run Code Online (Sandbox Code Playgroud)

以下是我的someClass课程:

import multiprocessing

class someClass(object):
    def __init__(self):
        pass

    def f(self, x):
        return x*x

    def go(self):
        pool = multiprocessing.Pool(processes=4)       
        print pool.map(self.f, range(10))
Run Code Online (Sandbox Code Playgroud)

任何人都知道问题可能是什么,或者一个简单的方法呢?

python multithreading pool pickle multiprocessing

206
推荐指数
6
解决办法
12万
查看次数

保存对象(数据持久性)

我创建了一个像这样的对象:

company1.name = 'banana' 
company1.value = 40
Run Code Online (Sandbox Code Playgroud)

我想保存这个对象.我怎样才能做到这一点?

python serialization object save pickle

206
推荐指数
4
解决办法
21万
查看次数

多处理:如何在类中定义的函数上使用Pool.map?

当我运行类似的东西:

from multiprocessing import Pool

p = Pool(5)
def f(x):
     return x*x

p.map(f, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是,将此作为类的函数:

class calculate(object):
    def run(self):
        def f(x):
            return x*x

        p = Pool()
        return p.map(f, [1,2,3])

cl = calculate()
print cl.run()
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/sw/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/sw/lib/python2.6/threading.py", line 484, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/sw/lib/python2.6/multiprocessing/pool.py", line 225, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Run Code Online (Sandbox Code Playgroud)

我看过Alex Martelli的一篇文章处理同样的问题,但它不够明确.

python pickle multiprocessing

165
推荐指数
10
解决办法
9万
查看次数

存储Python词典

我习惯使用.csv文件将数据输入和输出Python,但是存在明显的挑战.关于在json或pck文件中存储字典(或字典集)的简单方法的任何建议?例如:

data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
Run Code Online (Sandbox Code Playgroud)

我想知道如何保存它,然后如何加载它.

python json dictionary save pickle

162
推荐指数
6
解决办法
22万
查看次数

将类实例序列化为JSON

我正在尝试创建类实例的JSON字符串表示并且有困难.假设这个类是这样构建的:

class testclass:
    value1 = "a"
    value2 = "b"
Run Code Online (Sandbox Code Playgroud)

对json.dumps的调用是这样的:

t = testclass()
json.dumps(t)
Run Code Online (Sandbox Code Playgroud)

它失败并且告诉我测试类不是JSON可序列化的.

TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用pickle模块:

t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))
Run Code Online (Sandbox Code Playgroud)

它提供类实例信息,但不提供类实例的序列化内容.

b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python serialization json pickle

160
推荐指数
10
解决办法
25万
查看次数

Pickle在Python 2和3之间不兼容numpy数组

我试图加载链接的MNIST数据集在这里使用该程序在Python 3.2:

import pickle
import gzip
import numpy


with gzip.open('mnist.pkl.gz', 'rb') as f:
    l = list(pickle.load(f))
    print(l)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它给了我错误:

Traceback (most recent call last):
   File "mnist.py", line 7, in <module>
     train_set, valid_set, test_set = pickle.load(f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在Python 2.7中解码pickle文件,并重新编码.所以,我在Python 2.7中运行了这个程序:

import pickle
import gzip
import numpy


with gzip.open('mnist.pkl.gz', 'rb') as f:
    train_set, valid_set, test_set = pickle.load(f)

    # Printing out the three objects reveals that they are
    # …
Run Code Online (Sandbox Code Playgroud)

python pickle python-3.x

147
推荐指数
6
解决办法
8万
查看次数

Python中常见的pickle用例

我看过pickle文档,但我不明白pickle在哪里有用.

泡菜有哪些常见的用例?

python serialization use-case pickle

127
推荐指数
5
解决办法
2万
查看次数