Python|複数行の文字列からインデントを取り除く

1. はじめに

Pythonで複数行の文字列を扱う際、インデント(字下げ)が意図せず残ってしまい、整形や出力結果が崩れてしまうことがあります。本記事では、Python|複数行の文字列からインデントを取り除く方法について、初心者にもわかりやすく解説します。

この記事を読めば、textwrap.dedentinspect.cleandocといった便利な関数の使い方をマスターでき、テンプレートやドキュメント処理で役立つ知識が身に付きます。

 

2. Pythonでインデントを取り除く方法の基本

2-1. textwrap.dedentの基本

Pythonの標準ライブラリtextwrapには、dedentという関数があり、共通のインデントを自動的に取り除いてくれます。

基本的なコード例:

import textwrap

text = '''\
    これはサンプルの
    複数行の文字列です。
    インデントを削除します。'''

clean_text = textwrap.dedent(text)
print(clean_text)

実行結果:

これはサンプルの
複数行の文字列です。
インデントを削除します。

このように、textwrap.dedent()は全行の共通インデントをきれいに取り除いてくれます。

2-2. inspect.cleandocも便利

似た機能を持つinspect.cleandoc()も、Pythonの標準ライブラリに含まれています。こちらも文字列整形に便利です。

import inspect

text = """
    これは別の例です。
    cleandocで整形します。
"""
clean_text = inspect.cleandoc(text)
print(clean_text)

実行結果:

これは別の例です。
cleandocで整形します。

cleandoc()はドキュメンテーション文字列の整形に適しており、docstringを整形したいときに特に有用です。

 

3. よくある使い方・応用例

3-1. HTMLテンプレートの整形

複数行にわたるHTMLテンプレートをPythonで扱う場合、インデントが崩れるとレンダリング結果に影響することがあります。

コード例:

import textwrap

html_template = textwrap.dedent("""\
<html>
    <head><title>タイトル</title></head>
    <body>
        <h1>こんにちは</h1>
    </body>
</html>
""")

print(html_template)

実行結果:

<html>
    <head><title>タイトル</title></head>
    <body>
        <h1>こんにちは</h1>
    </body>
</html>

テンプレートを読みやすい形で記述できるうえ、不要なインデントを出力から除外できるのがポイントです。

3-2. 関数内での文字列整形

関数内で複数行のメッセージを出力する場合も、dedentを使うことで見た目を保ちながらインデントを除去できます。

def show_message():
    import textwrap
    message = textwrap.dedent("""\
        処理が完了しました。
        結果をご確認ください。""")
    print(message)

show_message()

実行結果:

処理が完了しました。
結果をご確認ください。

4. 注意点・エラー対策

4-1. 不揃いなインデントは処理されない

textwrap.dedent()は「すべての行に共通しているインデント」のみを除去します。つまり、1行でも異なるインデントがあると、期待どおりに動作しません。

例:

text = '''\
    正常なインデント
     不揃いなインデント'''

import textwrap
print(textwrap.dedent(text))

実行結果:

 正常なインデント
 不揃いなインデント

このように、インデントが揃っていないと、うまく除去されません。すべての行でインデントが統一されていることを確認しましょう。

4-2. 空白とタブの混在に注意

空白とタブが混在している場合、Pythonのインデント解析と同じく、dedent()もうまく処理できないことがあります。なるべく空白に統一することが推奨されます。

 

5. まとめ

本記事では、Pythonで複数行の文字列からインデントを取り除く方法について、textwrap.dedentinspect.cleandocの使い方を中心に解説しました。

  • dedent()でテンプレートやメッセージの整形が簡単に
  • cleandoc()はdocstring整形にも使える
  • 共通のインデントでなければ除去できない点に注意

実務でも、メールテンプレートやHTML生成、ログ出力など幅広いシーンで役立つテクニックです。ぜひ日常の開発に取り入れてみてください!

タイトルとURLをコピーしました