2017-08-04 15 views
1

pickleモジュールでバイナリモードを使用してファイルに書き込もうとしました。これは一例です:削除せずにpickleファイルに追加

import pickle 
    file = open("file.txt","wb") 
    dict = {"a":"b","c":"d"} 
    pickle.dump(dict, file) 
    file.close() 

しかし、このメソッドは以前に書かれた他のdictsを削除します。ファイル内の他のものを削除せずに、どのように書き込むことができますか?

+0

関連:https://stackoverflow.com/questions/4706499/how-do-you-append-to-a-fileただし、ピクルファイルで動作するかどうかを確認してください。 – Evert

答えて

0

元のファイルに追加する必要がありますが、最初に内容を消去してください(元のファイルにはピクルスのコンテンツがあると仮定します)。 あなたはそれが内のファイルを読み込み、それを書き換える必要はありませんので、単純に、新しい漬け物

import pickle 

#create the initial file for test purposes only 
obj = {"a":"b","c":"d"} 
with open("file.txt","wb") as f: 
    pickle.dump(obj, f) 

#reopen and unpickle the pickled content and read to obj 
with open("file.txt","rb") as f: 
    obj = pickle.load(f) 
    print(obj) 

#add to the dictionary object 
obj["newa"]="newb" 
obj["newc"]="newd" 

with open("file.txt","wb") as f: 
    pickle.dump(obj, f) 

#reopen and unpickle the pickled content and read to obj 
with open("file.txt","rb") as f: 
    obj = pickle.load(f) 
    print(obj) 
+0

ありがとう、私はこれを私のコードに適用しようとします – taynan

0

あなたはファイルに漬けオブジェクトを連結することができますと、既存のファイルを上書きされてやっていました。ファイルを上書きするのではなく、ファイルに追加するだけです。

は交換してください:

file = open("file.txt","wb") 

で:

file = open("file.txt","ab") 

ファイルの使用可能なモードと彼らがやるの詳細については、documentationを参照してください。

そして、データをアンピクルするには、複数のpickle.load()が必要です。

+0

ええ、私は "ab"とa + bを使用しようとしましたが、理由はありませんが、これは動作しません:/ – taynan

+0

@taynan – glibdud

+0

しかし、あなたはピクルスに "rb"を使う必要はないと言っていますか? – taynan

関連する問題