7.7。 テキストの折り返し —テキストの折り返しと塗りつぶし
バージョン2.3の新機能。
ソースコード: :source: `Lib / textwrap.py`
textwrap モジュールは、 wrap()と fill()の2つの便利な関数と、すべてを実行するクラス TextWrapper を提供します。作業、およびユーティリティ関数 dedent()。 1つまたは2つのテキスト文字列を折り返すか埋めるだけの場合は、便利な関数で十分です。 それ以外の場合は、効率を上げるために TextWrapper のインスタンスを使用する必要があります。
- textwrap.wrap(text[, width[, ...]])
1つの段落をテキスト(文字列)でラップして、すべての行の長さが最大で幅文字になるようにします。 最終的な改行なしで、出力行のリストを返します。
オプションのキーワード引数は、以下に記載されている TextWrapper のインスタンス属性に対応しています。 width のデフォルトは
70
です。wrap()の動作の詳細については、 TextWrapper.wrap()メソッドを参照してください。
- textwrap.fill(text[, width[, ...]])
text で単一の段落をラップし、ラップされた段落を含む単一の文字列を返します。 fill()はの省略形です
"\n".join(wrap(text, ...))
wrap()と fill()はどちらも、 TextWrapper インスタンスを作成し、そのインスタンスで単一のメソッドを呼び出すことで機能します。 そのインスタンスは再利用されないため、多くのテキスト文字列をラップ/フィルするアプリケーションの場合、独自の TextWrapper オブジェクトを作成する方が効率的です。
テキストは、空白で、ハイフンでつながれた単語のハイフンの直後にラップすることが好ましい。 TextWrapper.break_long_words がfalseに設定されていない限り、必要に応じて長い単語が分割されます。
追加のユーティリティ関数 dedent()が提供され、テキストの左側に不要な空白がある文字列からインデントを削除します。
- textwrap.dedent(text)
text のすべての行から共通の先頭の空白をすべて削除します。
これを使用すると、トリプルクォートされた文字列をディスプレイの左端に揃えながら、ソースコードでインデントされた形式で表示できます。
タブとスペースはどちらも空白として扱われますが、等しくないことに注意してください。行
" hello"
と"\thello"
には、共通の先頭の空白がないと見なされます。 (この動作はPython 2.5の新機能です。このモジュールの古いバージョンでは、一般的な先頭の空白を検索する前にタブが誤って展開されていました。)空白のみを含む行は入力では無視され、出力では単一の改行文字に正規化されます。
例えば:
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'
- class textwrap.TextWrapper(...)
TextWrapper コンストラクターは、いくつかのオプションのキーワード引数を受け入れます。 各引数は1つのインスタンス属性に対応するため、たとえば
wrapper = TextWrapper(initial_indent="* ")
と同じです
wrapper = TextWrapper() wrapper.initial_indent = "* "
同じ TextWrapper オブジェクトを何度も再利用でき、使用の合間にインスタンス属性に直接割り当てることで、そのオプションを変更できます。
TextWrapper インスタンス属性(およびコンストラクターへのキーワード引数)は次のとおりです。
- width
(デフォルト:
70
)折り返されている行の最大長。 width より長い入力テキストに個々の単語がない限り、 TextWrapper は、 width 文字より長い出力行がないことを保証します。
- expand_tabs
(デフォルト:
True
)trueの場合、 text のすべてのタブ文字は、 text のexpandtabs()
メソッドを使用してスペースに展開されます。
- 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の場合、すべての行の最初と最後(折り返し後、インデント前)の空白は削除されます。 ただし、段落の先頭の空白は、その後に空白以外の文字が続く場合は削除されません。 ドロップされる空白が行全体を占める場合、行全体がドロップされます。バージョン2.6の新機能:以前のバージョンでは常に空白が削除されていました。
- 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に設定する必要があります。 以前のバージョンのデフォルトの動作では、ハイフンでつながれた単語を常に壊すことができました。バージョン2.6の新機能。
TextWrapper は、モジュールレベルの便利な関数に類似した2つのパブリックメソッドも提供します。
- wrap(text)
1つの段落をテキスト(文字列)でラップして、すべての行の長さが最大で幅文字になるようにします。 すべてのラッピングオプションは、 TextWrapper インスタンスのインスタンス属性から取得されます。 最終的な改行なしで、出力行のリストを返します。 ラップされた出力にコンテンツがない場合、返されるリストは空です。
- fill(text)
text で単一の段落をラップし、ラップされた段落を含む単一の文字列を返します。