textwrapモジュールを超えた!Pythonでテキスト処理を自由自在に操る


主な機能

  • shorten関数
    長い文字列を、省略記号を使って短縮します。
  • dedent関数
    インデントされた部分を削除します。
  • fill関数
    段落を、指定した幅に収まるように余白を調整します。
  • wrap関数
    長い文章を、指定した行の長さに収まるように改行します。

使い方

wrap関数

import textwrap

text = "Pythonは汎用プログラミング言語です。オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートし、豊富なライブラリとフレームワークが用意されています。初心者から上級者まで幅広く利用されており、Web開発、データ分析、機械学習など、様々な分野で活躍しています。"

# 行の長さを40文字に設定
wrapped_text = textwrap.wrap(text, width=40)

# 改行コードで結合して出力
print("\n".join(wrapped_text))

出力例

Pythonは汎用プログラミング言語です。
オブジェクト指向、手続き型、関数型など、
様々なパラダイムをサポートし、豊富なライブラリ
とフレームワークが用意されています。
初心者から上級者まで幅広く利用されており、
Web開発、データ分析、機械学習など、
様々な分野で活躍しています。

fill関数

import textwrap

text = "Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。"

# 段落の幅を70文字に設定
filled_text = textwrap.fill(text, width=70)

print(filled_text)

出力例

Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートし、豊富なライブラリとフレームワークが用意されています。初心者から上級者まで幅広く利用されており、Web開発、データ分析、機械学習など、様々な分野で活躍しています。

dedent関数

import textwrap

text = """
    def my_function():
        """
        簡単な説明文
        """
        print("Hello, world!")

my_function()
"""

# インデントを削除
dedented_text = textwrap.dedent(text)

print(dedented_text)

出力例

def my_function():
    """
    簡単な説明文
    """
    print("Hello, world!")

my_function()

shorten関数

import textwrap

text = "Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。"

# 省略記号を"..."に設定し、最大長を20文字に設定
shortened_text = textwrap.shorten(text, max_length=20, placeholder="...")

print(shortened_text)
Pythonは...
  • textwrapモジュールは、ターミナル上でのテキスト整形だけでなく、HTMLやXMLなどの文書整形にも利用できます。


長い文章を画面サイズに収まるように折り返す

import textwrap

# 長い文章を用意
text = """Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。
オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートし、豊富なライブラリとフレームワークが用意されています。
初心者から上級者まで幅広く利用されており、Web開発、データ分析、機械学習など、様々な分野で活躍しています。"""

# 画面サイズを想定した行の長さに設定
width = 80

# wrap() 関数を使って文章を折り返す
wrapped_text = textwrap.wrap(text, width=width)

# 改行コードで結合して表示
print("\n".join(wrapped_text))

段落の余白を調整する

import textwrap

# 段落を用意
text = """Pythonは汎用プログラミング言語であり、オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートしています。
豊富なライブラリとフレームワークが用意されており、初心者から上級者まで幅広く利用されています。
Web開発、データ分析、機械学習など、様々な分野で活躍しています。"""

# 段落の幅を70文字に設定
width = 70

# fill() 関数を使って余白を調整
filled_text = textwrap.fill(text, width=width)

# 表示
print(filled_text)

インデントされた部分を削除する

import textwrap

# インデントされた文字列を用意
text = """
def my_function():
    """簡単な説明文"""
    print("Hello, world!")

my_function()
"""

# dedent() 関数を使ってインデントを削除
dedented_text = textwrap.dedent(text)

# 表示
print(dedented_text)

長い文字列を省略記号を使って短縮する

import textwrap

# 長い文字列を用意
text = "Pythonは1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。"

# 省略記号を "..." に設定し、最大長を20文字に設定
max_length = 20
placeholder = "..."

# shorten() 関数を使って短縮
shortened_text = textwrap.shorten(text, max_length=max_length, placeholder=placeholder)

# 表示
print(shortened_text)
import textwrap

# 複数行の文字列を用意
text = """Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。
オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートし、豊富なライブラリとフレームワークが用意されています。
初心者から上級者まで幅広く利用されており、Web開発、データ分析、機械学習など、様々な分野で活躍しています。"""

# wrap() 関数を使ってリストに変換
lines = textwrap.wrap(text)

# リストの内容を表示
for line in lines:
    print(line)


代替方法

  • ライブラリ
    str.format(), re モジュールの他にも、様々なライブラリがテキスト処理に役立ちます。
  • 正規表現
    より複雑なテキスト処理であれば、正規表現を使って抽出・置換を行うことができます。
  • フォーマット文字列
    シンプルなテキスト整形であれば、フォーマット文字列を使って実現できます。

具体的な状況と代替方法

シンプルな改行

text = "Pythonは汎用プログラミング言語です。"

# 改行文字で分割
lines = text.split("\n")

# 各行を出力
for line in lines:
    print(line)

段落の余白調整

text = """Pythonは汎用プログラミング言語であり、オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートしています。
豊富なライブラリとフレームワークが用意されており、初心者から上級者まで幅広く利用されています。
Web開発、データ分析、機械学習など、様々な分野で活躍しています。"""

# 2文字分の余白を設定
margin = "  "

# 各行の先頭に余白を追加
lines = []
for line in text.splitlines():
    lines.append(margin + line)

# 改行コードで結合して出力
print("\n".join(lines))

長い文字列の省略

text = "Pythonは1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。"

# 省略記号を "..." に設定し、最大長を20文字に設定
max_length = 20
placeholder = "..."

# スライスを使って省略
if len(text) > max_length:
    shortened_text = text[:max_length - len(placeholder)] + placeholder
else:
    shortened_text = text

# 表示
print(shortened_text)

インデントの削除

text = """
def my_function():
    """簡単な説明文"""
    print("Hello, world!")

my_function()
"""

# 先頭の空白を削除
dedented_text = text.lstrip()

# 表示
print(dedented_text)

複数行の文字列をリストに変換

text = """Pythonは、1991年にGuido van Rossum氏によって開発された汎用プログラミング言語です。
オブジェクト指向、手続き型、関数型など、様々なパラダイムをサポートし、豊富なライブラリとフレームワークが用意されています。
初心者から上級者まで幅広く利用されており、Web開発、データ分析、機械学習など、様々な分野で活躍しています。"""

# 改行文字で分割
lines = text.splitlines()

# リストとして表示
print(lines)
  • より複雑なテキスト処理を行う場合は、専門的なライブラリやフレームワークを利用することを検討しましょう。
  • 上記の代替方法は、あくまでも一例です。状況に合わせて、適切な方法を選択してください。