2013-02-26 8 views
25

नहीं है, मैं एक शब्दकोश को मुद्रित करने के लिए सुंदर प्रिंट का उपयोग करना चाहता हूं, लेकिन एक स्ट्रिंग में और कंसोल नहीं करना चाहता हूं। यह स्ट्रिंग अन्य कार्यों पर पारित की जानी है।प्रीटीप्रिंट पायथन एक स्ट्रिंग में है, और

मुझे पता है कि मैं sys.out के बजाय फ़ाइल निर्दिष्ट करने के लिए "स्ट्रीम" पैरामीटर का उपयोग कर सकता हूं लेकिन मुझे एक स्ट्रिंग चाहिए।

मैं यह कैसे कर सकता हूं?

+16

'एस = pprint.pformat (your_dict)' – thias

+0

@ थियास जिसमें न्यूलाइन शामिल नहीं है। – Fabian

+0

@ फ़ैबियन हां यह करता है। बस चौड़ाई पैरामीटर निर्दिष्ट करें। – Simon

उत्तर

1

बस StringIO module का उपयोग करें:

import StringIO 

output = StringIO.StringIO() 

अब आप prettyprint करने के लिए एक धारा के रूप में output पारित कर सकते हैं।

+0

यूनिकोड रूपांतरण से सावधान रहें! –

72

आप बस pprint मॉड्यूल से pformat समारोह बुलाना चाहिए:

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

'स्ट्रिंगियो' के माध्यम से जाने से कहीं अधिक पायथनिक, आईएमएचओ – thias

+0

मैं सहमत हूं। मुझे 'pprint' के इस विकल्प के बारे में पता नहीं था। –

+2

इसे सही उत्तर के रूप में सेट करने की आवश्यकता है क्योंकि अनुरोध स्ट्रिंग के रूप में पप्रिंट के लिए है, pformat ** ** इसके लिए विधि है। यह वास्तव में इस उद्देश्य के लिए 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' – thias

+0

@ थियास है - कुछ सीमाएं हैं [JSON serializable होना चाहिए], लेकिन यह आपके द्वारा दिए गए उदाहरण के साथ ठीक काम करता है। – root

+1

तो यह आपके लिए सुंदर है? :-) – thias

संबंधित मुद्दे