各行の先頭にいくつかの文字を追加したいと思います。
どうすればいいですか?
私はそれをしていました:
'\n\t\t\t'.join(myStr.splitlines())
しかし、それは完璧ではありません。それを行うためのより良い方法があるかどうかを知りたいです。私は元々、テキストのブロック全体を自動的にインデントしたいと考えています。
各行の先頭にいくつかの文字を追加したいと思います。
どうすればいいですか?
私はそれをしていました:
'\n\t\t\t'.join(myStr.splitlines())
しかし、それは完璧ではありません。それを行うためのより良い方法があるかどうかを知りたいです。私は元々、テキストのブロック全体を自動的にインデントしたいと考えています。
なかなかいい方法だと思います。改善できることの 1 つは、メソッドが先頭の改行を導入し、末尾の改行を削除することです。これはしません:
'\t\t\t'.join(myStr.splitlines(True))
str.splitlines([keepends])
文字列内の行のリストを返し、行の境界で区切ります。このメソッドは、行を分割するために普遍的な改行アプローチを使用します。keepends が指定されて true でない限り、結果のリストに改行は含まれません。
また、文字列が改行で始まらない限り、文字列の先頭にタブを追加していないため、これも行うことができます。
'\t\t\t'.join(('\n'+myStr.lstrip()).splitlines(True))
柔軟なオプションについては、標準ライブラリの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.