2016-09-20 24 views
1

以前にピクルファイルを読み込めました。新しいファイルを別の名前で保存しました。古いファイルと新しいファイルのどちらも読み込めません。それは私がスクラブするのに苦労したデータを含んでいるので、バマーです。ここでピクルファイルを読み込めません。

は、私が保存するために使用するコードです:(

def pickleLoad(): 
    store = pickle.load(open(".../shelf3.p","rb")) 

作成したファイルが存在する、と私はpickleLoadを実行します。ここでは

def pickleStore(): 
    pickle.dump(store, open("...shelf3.p", "wb")) 

は私が再ロードするために使用するコードです。 )エラーは発生せず、パネル変数エクスプローラに変数も表示されません。存在しないファイルを読み込もうとすると、エラーメッセージが表示されます。

私はspyder、python 3.5を実行しています。

提案がありますか?私はこのような何かを示唆している一般的な、より汎用性の高いアプローチとして

+2

'store = ...'は、関数の終了時に存在しなくなったローカル変数に代入しています。関数の前に 'global store'を置いてモジュールレベルの変数に代入させることを意味しますか? –

+0

はい、それは私の意図です。なぜ私は彼が事件になることを望んでいないだろうか? – abc

+0

まあ、あなたが提供した機能では、実際に*他に何もしていません。ただすぐに出て、取り出されたコンテンツを投げ捨てます。実際には、ローカル変数を読み込みしようとしていることを実証するかもしれません。 –

答えて

2

あなたが関数からモジュールレベル変数に書き込みたい場合は、あなたがglobalキーワードを使用する必要があります。

store = None 

def pickleLoad(): 
    global store 
    store = pickle.load(open(".../shelf3.p","rb")) 

を...または値を返し、モジュールレベルのコードから割り当てを実行:

store = None 

def pickleLoad(): 
    return pickle.load(open(".../shelf3.p","rb")) 

store = pickleLoad() 
1

def load(file_name): 
    with open(simulation, 'rb') as pickle_file: 
     return pickle.load(pickle_file) 

def save(file_name, data): 
    with open(file_name, 'wb') as f: 
     pickle.dump(data, f) 

を私は、同じコードを何度も書き換え減少させるためにいくつかのプロジェクトにこのスニペットを追加しました。

+0

ブロックが終了するとすぐにファイルディスクリプタが閉じられることを保証する以外に、ガベージコレクション時にこれを延期するのではなく、これがどのような問題を解決しますか? –

関連する問題