2017-09-30 16 views
0

読み取り可能な形式でのpythonでdictonary:漬物、私はこのような形式のファイルでPythonの辞書を持っている

(DP0 S'Test」 P1 S'Test1' P2 sS'Test2 ' P3 S'Test2' P4 sS'Starspy ' P5 S'SHSN4N' P6 の

参照: Save a dictionary to a file (alternative to pickle) in Python?

と私はそれを読みたい。

このリンクの質問によると、これはピクルスで節約されています。しかし、私がpickleで辞書を保存しようとすると、私が取得するフォーマットは対応しません。例えば、コード

import pickle 
mydict = {'a': 1, 'b': 2, 'c': 3} 
output = open('myfile.dict', 'wb') 
pickle.dump(mydict, output) 
output.close() 

コンテンツ

€} Q(X aqKX bqKX cqKu持つファイルを生成

私はOKそれを読み戻すことができ、それは持ってい

最初に、...(dp0の形式のファイルを書き込むにはどうすればよいですか? 10 S'Test ' P1 S'Test1' P2 sS'Test2' P3 S'Test2' P4 sS'Starspy' P5 S'SHSN4N」 P6 S。 ?

第2に、どのようにその形式のファイルを読むことができますか?

+0

人が読めるようにするには、代わりにJSONを使用してみましょう。 – jonrsharpe

答えて

0

質問はpickleモジュールのドキュメントに答えている:https://docs.python.org/2/library/pickle.html#data-stream-format

酸洗のために使用することができる3種類のプロトコルが現在ありません。

プロトコルバージョン0は元のASCIIプロトコルであり、以前のバージョンのPythonと互換性のある です。

プロトコルバージョン1は、 Pythonの以前のバージョンと互換性のある古いバイナリ形式の です。

プロトコルバージョン2はPython 2.3で導入されました。新しいスタイルのクラスのはるかに効率的な酸洗いを に提供します。

最初に表示されるものは、プロトコルバージョン0です。これがデフォルトです。最後に、バイナリプロトコルバージョン1または2です。

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt')) 
>>> file('f.txt', 'rt').read() 
"(dp0\nS'hello'\np1\nS'world'\np2\ns." 

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 2) 
>>> file('f.txt', 'rt').read() 
'\x80\x02}q\x00U\x05helloq\x01U\x05worldq\x02s.' 

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 1) 
>>> file('f.txt', 'rt').read() 
'}q\x00U\x05helloq\x01U\x05worldq\x02s.' 

PS:ちょうど読みやすい形式を使用しないのはなぜ、例えば

ちょうどプロトコルバージョン番号を指定しますジュソン?

+0

あなたのコードは私にとっては機能しません。 – Jose

0

可読な辞書が必要な場合はjsonとしてください。これはPythonに組み込まれており、出力は辞書によく似ています。

+0

申し訳ありませんが、あなたのコードは私のコンピュータでは動作しません。それは私にエラーを与える。私の問題は、誰かが私に渡す(つまり、私は別のフォーマットでデータを保存することができない)多くのレイヤーを持つネストされた辞書を持つ大きなファイルを持っていて、そのファイルがフォーマットであるということです(dp0 S'Test 'p1 S'Test1 'p2 sS'Test2' p3 S'Test2 'p4 sS'Starspy' p5 S'SHSN4N 'p6 s。その理由は次のとおりです。1)そのような形式のファイルをどのように保存できるかを知るため、2)主に私が持っているファイルを開くことができるように。 – Jose

0

私が持っている問題は、バージョンの問題でした。私はバージョン3を使用していましたが、それはバージョン2で動作します.Tharの場合、私が読みたいファイルに書かれているフォーマットでファイルを作成することができます。どうもありがとうございました!!!

関連する問題