当我尝试应用我在互联网上找到的一些代码时,我遇到了一个被腌制的数据集。现在要插入我自己的数据集,我需要自己逆转酸洗。读取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
可能是我的问题?一个好的酸洗代码怎么样?
答案 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)