2013-02-26 4 views
25

私は辞書を出力するのにprettyprintを使いたいが、文字列にはコンソールにしない。 この文字列は他の関数に渡されます。PrettyPrint Pythonを文字列に変換し、標準出力ではない

私はsys.outの代わりにファイルを指定するのに "stream"パラメータを使うことができますが、文字列が必要だと知っています。

どうすればよいですか?

+16

'S = pprint.pformat(your_dict)' – thias

+0

を@ thiasは改行を含みません。 – Fabian

+0

@Fabianはいそうです。 widthパラメータを指定するだけです。 – Simon

答えて

1

だけStringIO moduleを使用します。

import StringIO 

output = StringIO.StringIO() 

今、あなたはprettyprintへのストリームとしてoutputを渡すことができます。

+0

ユニコード変換に注意してください! –

72

あなたは、単にPPRINTモジュールからpformat関数を呼び出す必要があります。

import pprint 
s = pprint.pformat(aDict) 
+2

「StringIO」経由よりもはるかにpythonic、IMHO – thias

+0

私は同意します。私は 'pprint'のこのオプションについて知らなかった。 –

+2

これは正しい答えとして設定する必要があります。これは、要求がpprintの文字列であるため、pformatは** thisの**メソッドです。 pprintモジュールによってこの目的のために提供されています。 – Techdragon

7

私は時々そのためjsonモジュールを使用します。

In [1]: import json 

In [2]: d = {'a':1, 'b':2, 'c':{'a':1}} 

In [3]: s = json.dumps(d, indent=4) 

In [4]: s 
Out[4]: '{\n "a": 1, \n "c": {\n  "a": 1\n }, \n "b": 2\n}' 

In [5]: print s 
{ 
    "a": 1, 
    "c": { 
     "a": 1 
    }, 
    "b": 2 
} 
+0

'd = {'a':1、 'b':2、 'c':{'a':[1,2,3,4]}}'を試してください。 'pprint'のように任意のpythonオブジェクトではうまく動作しないと思います。 – thias

+0

@thias - JSONのシリアライズ可能な制限がいくつかありますが、あなたが与えた例でうまく動作します。 – root

+1

それはあなたにかなりかわいいですか? :-) – thias

関連する問題