PrettyPrint python в строку, а не stdout

Я хотел бы использовать prettyprint для печати словаря, но в строку, а не для консоли. Эта строка должна быть передана другим функциям.

Я знаю, что могу использовать параметр "stream", чтобы указать файл вместо sys.out, но я хочу строку.

Как мне это сделать?

Ответ 1

Просто используйте модуль StringIO:

import StringIO

output = StringIO.StringIO()

Теперь вы можете передавать output в виде потока в prettyprint.

Ответ 2

Вы должны просто вызвать функцию pformat из модуля pprint:

import pprint
s = pprint.pformat(aDict)

Ответ 3

Я иногда использую модуль 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
}