这个pickle命令的逆操作是什么?

时间:2013-07-18 14:53:15

标签: python pickle

当我尝试应用我在互联网上找到的一些代码时,我遇到了一个被腌制的数据集。现在要插入我自己的数据集,我需要自己逆转酸洗。读取pickle的代码是:

import cPickle, gzip, numpy

# Load the dataset
f = gzip.open('mnist.pkl.gz', 'rb')
train_set, valid_set, test_set = cPickle.load(f)
f.close()

我现在想自己写一个泡菜:

with open(outfile) as f:
    train_set = allfiles[:len(allfiles)/3] 
    valid_set = allfiles[len(allfiles)/3:(len(allfiles)/3)*2] 
    test_set  = allfiles[(len(allfiles)/3)*2:]

    cPickle.dump((train_set,valid_set,test_set), outfile,0) 

然而我得到:

 TypeError: argument must have 'write' attribute

可能是我的问题?一个好的酸洗代码怎么样?

2 个答案:

答案 0 :(得分:2)

您想使用文件对象,而不是文件名:

cPickle.dump((train_set,valid_set,test_set), f, 0) 

但是,您的输入也是GZIP压缩的:

with gzip.open(outfile, 'wb') as f:
    # ...
    cPickle.dump((train_set,valid_set,test_set), f, 0) 

请注意,您自己的代码也忘记了为打开的文件对象说明正确的模式;不带参数的open(outfile)以read-modus打开文件,写入将失败,并出现IOError: File not open for writing异常。

答案 1 :(得分:0)

cPickle.dump((train_set,valid_set,test_set), outfile,0) 

outfile只是一个文件名。你应该使用:

cPickle.dump((train_set,valid_set,test_set), f,0)