2016-11-15 3 views
0

は、私はそれは辞書が含まれていることを認識しPythonでpickleデータベースを変更するには?

import pickle, pprint 
import sys 

def main(datafile): 
    with open(datafile,'rb')as fin: 
     data = pickle.load(fin) 

    pprint.pprint(data) 

if __name__=='__main__': 
    if len(sys.argv) != 2: 
     print "Pickle database file must be given as an argument." 
     sys.exit() 
    main(sys.argv[1]) 

次のコードを使用して読んでいますピクルスデータベースを持っています。このディクショナリから一部の値を削除/編集し、新しいpickleデータベースを作成したい。 このプログラムの出力をファイルに保存しています(辞書の要素を読み込み、削除する要素を選択できるようにします)。このファイル(pprintedデータ構造)を読み込み、そこからpickleデータベースを作成するにはどうすればいいですか?

+0

pprintedテキストファイルに有効なpythonコードが含まれていることを絶対に保証することはできません。ただし、キーの名前がわかっている場合は、そのキーなしでピクルファイル自体をリメイクすることができます。それで十分ですか? –

答えて

0

Python docspprintで述べられているように、オブジェクトをPython定数として表現できる限り、オブジェクトを(Python構文の意味で)有効なオブジェクトにすることが保証されています。だから最初のことは、dict、list、numbers、stringなどのためにあなたがやっている限り、あなたがやっていることは大丈夫だということです。特に、dictのある深さが定数(例えばカスタムオブジェクト)これは失敗します。

今、出力ファイルを読み込むことは、非常にまっすぐ進むようになります。これは、ファイルとより何ごとに1つのオブジェクトを保持することを想定している

import ast 
with open('output.txt') as fo: 
    data = fo.read() 
obj = ast.literal_eval(data) 

ast.literal_evalの代わりにevalを組み込んでも構いませんが、evalは任意のPythonコードを実行できるので、かなり安全ではありません。

関連する問題