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