11

各行の先頭にいくつかの文字を追加したいと思います。

どうすればいいですか?

私はそれをしていました:

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

しかし、それは完璧ではありません。それを行うためのより良い方法があるかどうかを知りたいです。私は元々、テキストのブロック全体を自動的にインデントしたいと考えています。

4

2 に答える 2

19

なかなかいい方法だと思います。改善できることの 1 つは、メソッドが先頭の改行を導入し、末尾の改行を削除することです。これはしません:

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

ドキュメントから:

str.splitlines([keepends])

文字列内の行のリストを返し、行の境界で区切ります。このメソッドは、行を分割するために普遍的な改行アプローチを使用します。keepends が指定されて true でない限り、結果のリストに改行は含まれません。

また、文字列が改行で始まらない限り、文字列の先頭にタブを追加していないため、これも行うことができます。

'\t\t\t'.join(('\n'+myStr.lstrip()).splitlines(True))
于 2013-08-22T19:44:07.390 に答える
3

柔軟なオプションについては、標準ライブラリの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

各行の先頭に柔軟なスペースを簡単に追加できるだけでなく、各行を収まるようにトリミングしたり、ハイフンを付けたり、タブを展開したりできることがわかります。

前に追加したために長くなりすぎた行をラップします (名前の由来):

>>> 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 を使用してテキストの行末の意味を保持したい場合は、textwrap と splitlines を組み合わせて、行末を同じに保ちます。

ぶら下げインデントの例:

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.
于 2013-08-22T20:12:46.030 に答える