2013-08-22 4 views
9

मैं प्रत्येक पंक्ति की शुरुआत में कुछ वर्ण जोड़ना चाहता हूं।प्रत्येक पंक्ति की शुरुआत में कुछ वर्ण जोड़ें

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

मुझे लगता है कि कर रहा था:

'\n\t\t\t'.join(myStr.splitlines())

लेकिन यह सही नहीं है और मुझे पता है कि अगर वहाँ बेहतर तरीके है कि ऐसा करने के लिए कर रहे हैं चाहते हैं। मैं मूल रूप से पाठ का एक संपूर्ण ब्लॉक स्वचालित रूप से इंडेंट करना चाहता हूं।

उत्तर

8

मुझे लगता है कि यह एक बहुत अच्छी विधि है। एक चीज जिसे आप बेहतर बना सकते हैं यह है कि आपकी विधि एक अग्रणी नई लाइन पेश करती है, और किसी भी पिछली नई लाइन को हटा देती है। यह कार्य नहीं करेंगे:

'\t\t\t'.join(myStr.splitlines(True)) 

From the docs:

str.splitlines ([keepends])

वापसी स्ट्रिंग में लाइनों की सूची, लाइन सीमा पर तोड़ दिया। यह विधि सार्वभौमिक न्यूलाइन विभाजन लाइनों के दृष्टिकोण का उपयोग करती है। लाइन ब्रेक परिणामस्वरूप सूची में शामिल नहीं हैं जब तक कि रख-रखाव और सत्य न हो।

इसके अलावा, जब तक कि आपके स्ट्रिंग एक नई पंक्ति के साथ शुरू होता है, तो आप, स्ट्रिंग की शुरुआत में कोई टैब जोड़ने नहीं कर रहे हैं आप ऐसा भी कर सकते हैं तो:

'\t\t\t'.join(('\n'+myStr.lstrip()).splitlines(True)) 
+0

मुझे नहीं पता था कि, धन्यवाद! – JeromeJ

1

लचीला के लिए विकल्प, आप मानक पुस्तकालय में textwrap पर एक नज़र डालना चाहते हैं।

उदाहरण:

>>> hamlet='''\ 
... To be, or not to be: that is the question: 
... Whether 'tis nobler in the mind to suffer 
... The slings and arrows of outrageous fortune, 
... Or to take arms against a sea of troubles, 
... And by opposing end them? To die: to sleep; 
... No more; and by a sleep to say we end 
... ''' 
>>> import textwrap 
>>> wrapper=textwrap.TextWrapper(initial_indent='\t', subsequent_indent='\t'*2) 
>>> print wrapper.fill(hamlet) 
    To be, or not to be: that is the question: Whether 'tis nobler in the 
     mind to suffer The slings and arrows of outrageous fortune, Or to 
     take arms against a sea of troubles, And by opposing end them? To 
     die: to sleep; No more; and by a sleep to say we end 

आप देख सकते हैं कि आप न केवल आसानी से एक लाइन के सामने पर लचीला अंतरिक्ष में जोड़ सकते हैं, तो आप फिट करने के लिए, hyphenate, आदि प्रत्येक पंक्ति ट्रिम कर सकते हैं टैब का विस्तार,

यह (इसलिए नाम) लाइनों है कि बहुत लंबा है क्योंकि मोर्चे पर अतिरिक्त की बन लपेटो जाएगा:

>>> wrapper=textwrap.TextWrapper(initial_indent='\t'*3, 
... subsequent_indent='\t'*4, width=40) 
>>> print wrapper.fill(hamlet) 
      To be, or not to be: that is the 
       question: Whether 'tis nobler in the 
       mind to suffer The slings and arrows 
       of outrageous fortune, Or to take 
       arms against a sea of troubles, And 
       by opposing end them? To die: to 
       sleep; No more; and by a sleep to 
       say we end 

बहुत लचीला और उपयोगी।

संपादित

आप textwrap के साथ पाठ में लाइन अंत का मतलब रखने के लिए, बस splitlines साथ textwrap गठबंधन लाइन रखने के लिए एक ही अंत चाहते हैं।

फांसी मांगपत्र का उदाहरण:

import textwrap 

hamlet='''\ 
Hamlet: In the secret parts of Fortune? O, most true! She is a strumpet. What's the news? 
Rosencrantz: None, my lord, but that the world's grown honest. 
Hamlet: Then is doomsday near.''' 

wrapper=textwrap.TextWrapper(initial_indent='\t'*1, 
          subsequent_indent='\t'*3, 
          width=30) 

for para in hamlet.splitlines(): 
    print wrapper.fill(para) 
    print 

प्रिंट

Hamlet: In the secret parts 
     of Fortune? O, most true! 
     She is a strumpet. What's 
     the news? 

Rosencrantz: None, my lord, 
     but that the world's grown 
     honest. 

Hamlet: Then is doomsday 
     near. 
+0

क्या हम, शायद, किसी भी तरह, नई लाइन प्रकार विभाजक (\ n, \ r \ n या \ r, अगर मैं सही हूं) जैसे 'str.splitlines (True)' करता है?मैं इस मॉड्यूल के करीब नजर रखूंगा लेकिन यह साफ दिखता है! – JeromeJ

+0

(... (2) या शायद यह पूरी तरह से बेकार है और मैं बेहतर रूप से केवल "\ n" का उपयोग करता हूं?) – JeromeJ

+0

@ जेरोमजे: आप बेकार क्यों कहते हैं? यह [बिल्कुल तुच्छ नहीं है] (http://hg.python.org/cpython/file/2.7/Lib/textwrap.py) क्या टेक्स्टव्रैप कर रहा है। एक शब्द प्रोसेसर में शब्द लपेटो के बारे में सोचो। यदि आप अपनी लाइनों के सामने 3 टैब जोड़ते हैं, तो क्या होता है जब दी गई जगह में रेखा को प्रदर्शित करने में बहुत लंबा समय होता है? यह पुस्तकालय आपको प्रत्येक पंक्ति की शुरुआत में स्थान जोड़ने और सभी शेष रेखाओं को लपेटने की अनुमति देता है यदि वह स्थान रेखा को बहुत व्यापक बनाता है। वह बेकार कैसे है? – dawg

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