2013-07-18 35 views
-1

當試圖應用我在互聯網上找到的一些代碼時,我遇到了一個被醃製的數據集。現在插入我自己的數據集,我需要自己反轉酸洗。這件作品的代碼讀取泡菜是:這個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

始終提供完整的堆棧跟蹤 – Marcin

回答

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)無參數以讀取模式打開文件,並且寫入將失敗,並出現IOError: File not open for writing異常。

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

outfile只是一個文件名。您應該使用:

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