2013-08-22 16 views
9

Ich möchte einige Zeichen am Anfang jeder Zeile hinzufügen.Fügen Sie einige Zeichen am Anfang jeder Zeile hinzu

Wie könnte ich tun?

ich das tat:

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

Aber es ist nicht perfekt und ich würde gerne wissen, ob es bessere Möglichkeiten gibt, das zu tun. Ich möchte ursprünglich einen ganzen Textblock automatisch einrücken.

Antwort

8

Ich denke, das ist eine ziemlich schöne Methode. Eine Sache, die Sie verbessern können, ist, dass Ihre Methode eine führende neue Zeile einfügt und alle nachfolgenden Zeilenumbrüche entfernt. Dies wird nicht:

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

From the docs:

str.splitlines ([keepends])

Zurück eine Liste der Zeilen in der Zeichenfolge, an der Linie Grenzen zu brechen. Diese Methode verwendet den universellen Zeilenumbruch Ansatz für das Aufteilen von Zeilen. Zeilenumbrüche sind in der Ergebnisliste nicht enthalten, es sei denn, Keepends ist gegeben und wahr.

Auch wenn Ihr String mit einem Newline beginnt, den Sie hinzufügen, keine Tabs am Anfang des Strings, so dass Sie auch möchten, dies zu tun:

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

Ich wusste nicht, dass, danke! – JeromeJ

1

Für flexible Optional können Sie sich in der Standardbibliothek textwrap ansehen.

Beispiel:

>>> 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 

Sie können sehen, dass Sie nicht nur leicht flexiblen Raum auf der Vorderseite jeder Zeile hinzufügen können, Sie jede Zeile trimmen passen, hyphenate, erweitern tabs usw.

Es wird wickeln (daher der Name) Linien, die zu lang geworden, weil der Zugaben auf der Vorderseite:

>>> 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 

Sehr flexibel und nützlich.

bearbeiten

Wenn Sie die Bedeutung von Zeilenenden im Text mit TextWrap zu halten, kombiniert nur mit Teilungslinien TextWrap Linie zu halten die gleichen Endungen.

Beispiel hängender Einzug:

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 

druckt

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

Können wir vielleicht irgendwie das Trennzeichen für neue Zeilen (\ n, \ r \ n oder \ r, wenn ich Recht habe) beibehalten, wie 'str.splitlines (True)'?Ich werde mir dieses Modul genauer ansehen, aber das sieht gut aus! – JeromeJ

+0

(... (2) oder vielleicht ist das völlig nutzlos und ich sollte besser nur "\ n" überall verwenden?) – JeromeJ

+0

@JeromeJ: Warum sagst du nutzlos? Es ist [nicht trivial] (http://hg.python.org/cpython/file/2.7/Lib/textwrap.py), was textwrap macht. Denken Sie an Wortumbruch in einem Textverarbeitungsprogramm. Wenn Sie der Vorderseite Ihrer Zeilen drei Tabstopps hinzufügen, was passiert, wenn die Zeile zu lang im angegebenen Bereich angezeigt wird? Mit dieser Bibliothek können Sie am Anfang jeder Zeile Platz hinzufügen und alle verbleibenden Zeilen umbrechen, wenn dieser Bereich die Zeile zu breit macht. Wie ist das nutzlos? – dawg

Verwandte Themen