textwrap —テキストの折り返しと塗りつぶし
ソースコード: :source: `Lib / textwrap.py`
textwrap モジュールは、いくつかの便利な関数と、すべての作業を行うクラスである TextWrapper を提供します。 1つまたは2つのテキスト文字列を折り返すか埋めるだけの場合は、便利な関数で十分です。 それ以外の場合は、効率を上げるために TextWrapper のインスタンスを使用する必要があります。
- textwrap.wrap(text, width=70, **kwargs)
1つの段落をテキスト(文字列)でラップして、すべての行の長さが最大で幅文字になるようにします。 最終的な改行なしで、出力行のリストを返します。
オプションのキーワード引数は、以下に記載されている TextWrapper のインスタンス属性に対応しています。 width のデフォルトは
70
です。wrap()の動作の詳細については、 TextWrapper.wrap()メソッドを参照してください。
- textwrap.fill(text, width=70, **kwargs)
text で単一の段落をラップし、ラップされた段落を含む単一の文字列を返します。 fill()はの省略形です
"\n".join(wrap(text, ...))
- textwrap.shorten(text, width, **kwargs)
指定されたテキストを折りたたんで切り捨て、指定された幅に合わせます。
まず、 text の空白が折りたたまれます(すべての空白が単一のスペースに置き換えられます)。 結果が width に収まる場合は、結果が返されます。 それ以外の場合は、残りの単語と
placeholder
がwidth
内に収まるように、十分な単語が最後から削除されます。>>> textwrap.shorten("Hello world!", width=12) 'Hello world!' >>> textwrap.shorten("Hello world!", width=11) 'Hello [...]' >>> textwrap.shorten("Hello world", width=10, placeholder="...") 'Hello...'
オプションのキーワード引数は、以下に記載されている TextWrapper のインスタンス属性に対応しています。 テキストが TextWrapper fill()関数に渡される前に空白が折りたたまれているため、 tabsize 、 expand_tabs の値を変更することに注意してください。 ]、 drop_whitespace 、および replace_whitespace は効果がありません。
バージョン3.4の新機能。
- textwrap.dedent(text)
text のすべての行から共通の先頭の空白をすべて削除します。
これを使用すると、トリプルクォートされた文字列をディスプレイの左端に揃えながら、ソースコードでインデントされた形式で表示できます。
タブとスペースはどちらも空白として扱われますが、等しくないことに注意してください。行
" hello"
と"\thello"
には、共通の先頭の空白がないと見なされます。空白のみを含む行は入力では無視され、出力では単一の改行文字に正規化されます。
例えば:
def test(): # end first line with \ to avoid the empty line! s = '''\ hello world ''' print(repr(s)) # prints ' hello\n world\n ' print(repr(dedent(s))) # prints 'hello\n world\n'
- textwrap.indent(text, prefix, predicate=None)
テキストの選択した行の先頭にプレフィックスを追加します。
text.splitlines(True)
を呼び出すと、行が区切られます。デフォルトでは、 prefix は、空白だけで構成されていないすべての行(行末を含む)に追加されます。
例えば:
>>> s = 'hello\n\n \nworld' >>> indent(s, ' ') ' hello\n\n \n world'
オプションの predicate 引数を使用して、インデントする行を制御できます。 たとえば、プレフィックスを空の空白のみの行に追加するのは簡単です。
>>> print(indent(s, '+ ', lambda line: True)) + hello + + + world
バージョン3.3の新機能。
wrap()、 fill()、 shorten()は、 TextWrapper インスタンスを作成し、そのインスタンスで単一のメソッドを呼び出すことで機能します。 そのインスタンスは再利用されないため、 wrap()や fill()を使用して多くのテキスト文字列を処理するアプリケーションの場合、独自の TextWrapperを作成する方が効率的です。 オブジェクト。
テキストは、空白で、ハイフンでつながれた単語のハイフンの直後にラップすることが好ましい。 TextWrapper.break_long_words がfalseに設定されていない限り、必要に応じて長い単語が分割されます。
- class textwrap.TextWrapper(**kwargs)
TextWrapper コンストラクターは、いくつかのオプションのキーワード引数を受け入れます。 各キーワード引数はインスタンス属性に対応しているため、たとえば
wrapper = TextWrapper(initial_indent="* ")
と同じです
wrapper = TextWrapper() wrapper.initial_indent = "* "
同じ TextWrapper オブジェクトを何度も再利用でき、使用の合間にインスタンス属性に直接割り当てることで、そのオプションを変更できます。
TextWrapper インスタンス属性(およびコンストラクターへのキーワード引数)は次のとおりです。
- width
(デフォルト:
70
)折り返されている行の最大長。 width より長い入力テキストに個々の単語がない限り、 TextWrapper は、 width 文字より長い出力行がないことを保証します。
- expand_tabs
(デフォルト:
True
)trueの場合、 text のすべてのタブ文字は、 text のexpandtabs()
メソッドを使用してスペースに展開されます。
- tabsize
(デフォルト:
8
) expand_tabs がtrueの場合、 text 内のすべてのタブ文字は、現在の列と指定されたものに応じて、0個以上のスペースに展開されます。タブサイズ。バージョン3.3の新機能。
- replace_whitespace
(デフォルト:
True
)trueの場合、タブの展開後、折り返しの前に、 wrap()メソッドは各空白文字を単一のスペースに置き換えます。 置き換えられる空白文字は次のとおりです:タブ、改行、垂直タブ、フォームフィード、およびキャリッジリターン('\t\n\v\f\r'
)。ノート
expand_tabs がfalseで、 replace_whitespace がtrueの場合、各タブ文字は単一のスペースに置き換えられます。これは、タブ展開と同じではありません。
ノート
replace_whitespace がfalseの場合、改行が行の途中に表示され、奇妙な出力が発生する可能性があります。 このため、テキストは( str.splitlines()などを使用して)個別に折り返される段落に分割する必要があります。
- drop_whitespace
(デフォルト:
True
)trueの場合、すべての行の最初と最後(折り返し後、インデント前)の空白は削除されます。 ただし、段落の先頭の空白は、その後に空白以外の文字が続く場合は削除されません。 ドロップされる空白が行全体を占める場合、行全体がドロップされます。
- initial_indent
(デフォルト:
)ラップされた出力の最初の行の前に付加される文字列。 最初の行の長さにカウントされます。 空の文字列はインデントされません。
- subsequent_indent
(デフォルト:
)最初を除くラップされた出力のすべての行の前に付加される文字列。 最初の行を除く各行の長さにカウントされます。
- fix_sentence_endings
(デフォルト:
False
)trueの場合、 TextWrapper は文の終わりを検出し、文が常に正確に2つのスペースで区切られるようにします。 これは通常、等幅フォントのテキストに適しています。 ただし、文検出アルゴリズムは不完全です。文末が小文字とそれに続く'.'
、'!'
、または'?'
のいずれか、場合によっては1つで構成されていることを前提としています。'"'
または"'"
の後にスペースが続きます。 これに関する問題の1つは、アルゴリズムが「Dr」の違いを検出できないことです。 の[...] Dr. Frankenstein's monster [...]
と「スポット」。 の
[...] See Spot. See Spot run [...]
fix_sentence_endings はデフォルトでfalseです。
文検出アルゴリズムは、「小文字」の定義を
string.lowercase
に依存し、ピリオドの後に2つのスペースを使用して同じ行の文を区切る規則に依存しているため、英語のテキストに固有です。
- break_long_words
(デフォルト:
True
)trueの場合、 width より長い行がないようにするために、 width より長い単語は分割されます。 falseの場合、長い単語は分割されず、一部の行は width より長くなる可能性があります。 ( width を超える量を最小限に抑えるために、長い単語が単独で1行に配置されます。)
- break_on_hyphens
(デフォルト:
True
)trueの場合、英語で慣例となっているように、折り返しは空白と複合語のハイフンの直後で行うことが望ましいです。 falseの場合、空白だけが改行に適した場所と見なされますが、本当に切り取り不可能な単語が必要な場合は、 break_long_words をfalseに設定する必要があります。 以前のバージョンのデフォルトの動作では、ハイフンでつながれた単語を常に壊すことができました。
- max_lines
(デフォルト:
None
)None
でない場合、出力には最大で max_lines 行が含まれ、プレースホルダーが出力の最後に表示されます。 。バージョン3.4の新機能。
- placeholder
(デフォルト:
' [...]'
)出力テキストが切り捨てられた場合に出力テキストの最後に表示される文字列。バージョン3.4の新機能。
TextWrapper は、モジュールレベルの便利な関数に類似したいくつかのパブリックメソッドも提供します。
- wrap(text)
1つの段落をテキスト(文字列)でラップして、すべての行の長さが最大で幅文字になるようにします。 すべてのラッピングオプションは、 TextWrapper インスタンスのインスタンス属性から取得されます。 最終的な改行なしで、出力行のリストを返します。 ラップされた出力にコンテンツがない場合、返されるリストは空です。
- fill(text)
text で単一の段落をラップし、ラップされた段落を含む単一の文字列を返します。