2013-02-26 13 views
25

Chciałbym użyć prettyprint do wydrukowania słownika, ale do napisu, a nie do konsoli. Ciąg ten należy przekazać innym funkcjom.Pyton PrettyPrint na ciąg znaków, a nie na stdout

Wiem, że mogę użyć parametru "stream" do określenia pliku zamiast sys.out, ale chcę ciąg.

Jak to zrobić?

+16

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

+0

@ thias, który nie zawiera znaków nowej linii. – Fabian

+0

@Fabian tak. Po prostu określ parametr width. – Simon

Odpowiedz

1

Wystarczy użyć StringIO module:

import StringIO 

output = StringIO.StringIO() 

Teraz można przejść output jako strumień do prettyprint.

+0

uważaj na konwersję Unicode! –

72

należy po prostu wywołać funkcję pformat z modułu pprint:

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

o wiele więcej python niż przechodzenie przez 'StringIO', IMHO – thias

+0

Zgadzam się. Nie wiedziałem o tej opcji "pprint". –

+2

To musi być ustawione jako poprawna odpowiedź, ponieważ żądanie dotyczy pprint jako łańcucha znaków, pformat jest metodą ** dla tego. Jest to przewidziane dokładnie w tym celu przez moduł Pprint. – Techdragon

7

czasami użyć modułu json na to:

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

spróbuj 'd = {'a': 1, 'b': 2, 'c': {'a': [1,2,3,4]}}'. Nie sądzę, że działa dobrze dla arbitralnych obiektów Pythona, takich jak 'pprint' ma – thias

+0

@thias - istnieją pewne ograniczenia [musi być serializowany JSON], ale działa dobrze na podanym przykładzie. – root

+1

, więc to jest dla ciebie piękne? :-) – thias

Powiązane problemy