2016-03-19 12 views

答えて

1

あなたはそのためpprintを使用することができます。

import pprint 
pprint.pformat(thedict) 
+0

それは答えです!大きなお返事ありがとうございます – PinkiNice

+0

それは私のためには機能しません。それはOPが既に持っていたのと同じように1行でそれを表示します。 – zondo

+0

@zondo私はこれを使用しました:file.write(pprint.pformat(my_dict)) – PinkiNice

4

あなたはJSONをインポートし、インデントレベルを指定することができます。しかし、これは文字列であることを

import json 

d = { 
    "cats": { 
      "sphinx": 3, 
      "british": 2 
      }, 
    "dogs": {} 
} 

j = json.dumps(d, indent=4) 
print(j) 
{ 
    "cats": { 
     "sphinx": 3, 
     "british": 2 
    }, 
    "dogs": {} 
} 

注:

>>> j 
'{\n "cats": {\n  "sphinx": 3, \n  "british": 2\n }, \n "dogs": {}\n}' 
2

もっと標準的な形式で保存したい場合は、例えば、yamlファイル(と関連のpythonパッケージhttp://pyyaml.org/wiki/PyYAMLDocumentation)、およびコードは次のようになります。

import yaml 
dictionary = {"cats": {"sphinx": 3}, {"british": 2}, "dogs": {}} 
with open('dictionary_file.yml', 'w') as yaml_file: 
    yaml.dump(dictionary, stream=yaml_file, default_flow_style=False) 

dumpは、ファイルに書き込まれるYAML形式の文字列を作成します。ストリームを指定してコンテンツをファイルに直ちに書き込むことが可能であることに注意してください。ファイルに書き込む前に何らかの理由で文字列を取得する必要がある場合は、指定しないで、ファイルの関数writeを使用してから書き込んでください。 また、default_flow_styleパラメータはより良いフォーマットを持つことができます。例のファイルが見えます:

cats: 
    british: 2 
    sphinx: 3 
dogs: {} 

再び辞書でYAMLファイルをロードするには:

import yaml 
with open('dictionary_file.yml', 'r') as yaml_file: 
    dictionary = yaml.load(yaml_file) 
+0

私はYAML形式が好きですが、あなたがそれを使う方法は、yamlライブラリで偽のファイルに内容を書き込んだ後、その偽のファイルは、実際のファイルに書き込むためだけに使用します。実際のファイルに直接書き込んで、この非効率性を防ぐのはなぜですか? – Anthon

+0

私は偽のファイルを使用していません。回答の最初のコードは実際のファイルに書き込まれ、2番目のコードは実際のファイルから読み込まれます。 Pythonで提供されているwithステートメントはdictionary_file.ymlという名前のファイルを開くことができ、ファイルオブジェクトは変数yaml_fileでアクセスすることができ、withブロックの最後にはclose()関数を呼び出す必要はありません。ファイル。 https://docs.python.org/2/tutorial/inputoutput.htmlのセクション7.2.1を確認してください。 – albertoql

+0

あなたはPyYAMLの仕組みを知らないようです。 'stream'引数を指定しないと、メモリ全体のダンプ全体(StringIO)に最初に書き込まれます。 – Anthon

0

あなたはpon(Pythonのオブジェクト表記モジュールを使用することによって、それをダンプすることができます:免責事項は、私が著者ですそのモジュール)の

from pon import PON, loads 

data = { 
    "cats": { 
     "sphinx": 3, 
     "british": 2 
     }, 
    "dogs": {} 
} 

pon = PON(obj=data) 
pon.dump() 

与える:

dict(
    cats=dict(
     sphinx=3, 
     british=2, 
    ), 
    dogs=dict( ), 
) 

正しいPythonですが、dictを使用してキーに必要な引用符付きの文字列を交換します。与え

read_back = loads(open('file_name.pon').read()) 
print(read_back) 

あなたは再びこれをロードすることができ

{'cats': {'sphinx': 3, 'british': 2}, 'dogs': {}} 

loads()は、文字列を評価しません、それは実際に安全に組み込みパーサのpythonのを使用してそれを解析していることに注意してください。

PONでは、コメントを保存しているファイルからPythonディクショナリを読み込み、コメントを付けたファイルをダンプすることもできます。これが実際の有用性が実現する場所です。

また

、あなたが任意のより読みやすいYAMLフォーマットのようなものを、好きならば、あなたはruamel.yamlを使用して行うことができます。

cats: 
    sphinx: 3 
    british: 2 
dogs: {} 
:あなたの内容のファイル file_name.yamlを与える

import ruamel.yaml 
ruamel.yaml.round_trip_dump(data, stream=open('file_name.yaml', 'wb'), indent=4) 

あなたが好むと思われるインデントを使用します(@アルベルトのバージョンよりも効率的です)

関連する問題