Pythonのtextwrapモジュールでテキストを整形・折り返す方法を徹底解説
Pythonには、プレーンテキストを整形したり折り返したりするための標準ライブラリtextwrapモジュールが用意されています。このモジュールを使うと、段落内の改行位置を調整しながら、テキストを見やすい形式に整えることができます。
textwrapモジュールを使用するには、まずコード内でインポートする必要があります。
import textwrap
TextWrapperの主な属性一覧
textwrap.TextWrapperクラスのコンストラクタには、以下のようなインスタンス属性があります。これらを組み合わせることで、柔軟にテキストの整形ルールを制御できます。
| 番号 | 属性と説明 |
|---|---|
| 1 | width 1行あたりの最大文字数です。デフォルト値は70です。 |
| 2 | expand_tabs Trueの場合、すべてのタブ文字がスペースに置き換えられます。デフォルト値はTrueです。 |
| 3 | tabsize expand_tabsがTrueのときに、タブを展開する際のスペース数を指定できます。デフォルト値は8です。 |
| 4 | replace_whitespace Trueの場合、テキスト内のすべての空白文字(タブや改行など)が単一のスペースに置き換えられます。デフォルト値はTrueです。 |
| 5 | drop_whitespace 折り返し処理の後、各行の先頭と末尾にある空白を削除します。デフォルト値はTrueです。 |
| 6 | initial_indent 折り返されたテキストの最初の行の先頭に付加される文字列です。デフォルト値は空文字列「''」です。 |
| 7 | subsequent_indent 折り返されたテキストの2行目以降の先頭に付加される文字列です。デフォルト値は空文字列「''」です。 |
| 8 | placeholder テキストが切り詰められた場合に出力の末尾に追加される文字列です。デフォルト値は「[...]」です。 |
| 9 | max_lines 折り返し後の出力行数の上限を指定します。Noneの場合は行数に制限がありません。デフォルト値はNoneです。 |
| 10 | break_long_words 指定したwidthに収まらない長い単語を強制的に分割して折り返します。デフォルト値はTrueです。 |
| 11 | break_on_hyphens ハイフンでつながれた複合語を、ハイフンの位置で折り返せるようにします。デフォルト値はTrueです。 |
textwrapモジュールの主要メソッド
textwrapモジュールには、テキスト整形のための便利なメソッドがいくつか用意されています。代表的なものを紹介します。
textwrap.wrap(text, width=70, **kwargs)
入力された段落を指定した行幅で折り返すメソッドです。デフォルトの行幅は70文字で、戻り値として折り返し後の各行が格納されたリストを返します。
textwrap.fill(text, width=70, **kwargs)
fill()メソッドはwrap()とほぼ同じ動作をしますが、リストではなく改行文字を含む単一の文字列を返す点が異なります。指定した幅を超えるたびに改行文字が挿入されます。
textwrap.shorten(text, width, **kwargs)
文字列を指定した幅に切り詰める(省略する)メソッドです。切り詰め後のテキスト全体の長さがwidth以内に収まるように調整され、末尾にプレースホルダー「[...]」が追加されます。
サンプルコード
実際にwrap()、fill()、shorten()を使った例を見てみましょう。
import textwrap
python_desc = """Python is a general-purpose interpreted, interactive, object-oriented,
and high-level programming language. It was created by Guido van Rossum
during 1985- 1990. Like Perl, Python source code is also available under
the GNU General Public License (GPL). This tutorial gives enough
understanding on Python programming language."""
my_wrap = textwrap.TextWrapper(width = 40)
wrap_list = my_wrap.wrap(text=python_desc)
for line in wrap_list:
print(line)
single_line = """Python is a general-purpose interpreted, interactive, object-oriented,
and high-level programming language."""
print('\n\n' + my_wrap.fill(text = single_line))
short_text = textwrap.shorten(text = python_desc, width=150)
print('\n\n' + my_wrap.fill(text = short_text))
実行結果
Python is a general-purpose interpreted, interactive, object-oriented, and high-level programming language. It was created by Guido van Rossum during 1985- 1990. Like Perl, Python source code is also available under the GNU General Public License (GPL). This tutorial gives enough understanding on Python programming language. Python is a general-purpose interpreted, interactive, object-oriented, and high-level programming language. Python is a general-purpose interpreted, interactive, object-oriented, and high- level programming language. It was created by Guido van Rossum [...]
このように、textwrapモジュールを使えば、wrap()で行ごとのリストを取得したり、fill()で整形済みの文字列を生成したり、shorten()で長い文章を簡潔に要約したりすることが簡単に実現できます。ログ出力やCLIツール、レポート生成など、テキストの見栄えを整えたい場面でぜひ活用してみてください。
-
PythonのMatplotlibで曲線とX軸の間の領域を塗りつぶす方法
PythonのMatplotlibを使って、曲線とX軸の間の領域を塗りつぶす方法を解説します。データの可視化において、曲線の下側の領域を色で強調することは、グラフの視認性を高めるために非常に有効です。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x および y のデータポイントを作成します。plot() メソッドを使って、x と y のデータポイントをプロットします。fill_between() メソッドを使用して、曲線とX軸の間の領域を塗りつぶします。show() メソッドを呼び出して、図を表示します。コード例import matpl
-
SeleniumとPythonで要素とテキストを取得する方法
Selenium WebDriverを使えば、Webページ上の要素とそのテキストを簡単に取得できます。手順としては、まずid、クラス名、CSSセレクターなどのロケーターを使って対象の要素を特定し、次にtextプロパティを使って要素内のテキストを取得します。基本構文s = driver.find_element_by_css_selector(h4).textここでdriverはWebDriverオブジェクトです。find_element_by_css_selectorメソッドは、CSSセレクターをロケーターとして要素を特定するために使用され、引数にロケーター値(この場合はh4)を渡します。最後