【Python】テキストデータから空白行を効率的に削除する方法

外部ファイルから読み込んだテキストデータや、Webスクレイピングで取得した文字列には、しばしば不要な空白行が含まれています。データ処理の前段階として、これらの空行(または空白文字のみの行)を取り除き、データを整形したい場合があります。

Pythonでは、文字列操作メソッドとリスト内包表記を組み合わせることで、このクレンジング処理を簡潔に実装できます。ここでは、不規則な空行を含むテキストデータを整形するコード例を紹介します。

目次

空白行削除のロジック

空白行を削除するための基本的なアプローチは以下の通りです。

  1. 行分割: テキスト全体を行ごとのリストに変換します。
  2. 判定と抽出: 各行に対して「空白文字を取り除いた結果、文字列が残るか」を判定し、条件を満たす行のみを抽出します。
  3. 再結合: 抽出した行を再び結合します。

実装例:住所録データの整形

以下のコードは、手動入力などで発生した不規則な空行を含む住所録データを、詰めて整形する例です。

def main():
    # 不規則な空行や、スペースのみの行が含まれるテキストデータ
    raw_address_data = """
Tokyo, Shinjuku
    
Osaka, Umeda
   
   
Nagoya, Sakae

Fukuoka, Hakata
"""

    # 1. 文字列を行ごとに分割する
    # splitlines() は改行コードの種類(\n, \r\n)を問わず適切に分割します
    lines = raw_address_data.splitlines()

    # 2. 空白行を除外して新しいリストを作成する
    # line.strip() は文字列の前後の空白を除去します。
    # 空白除去後に文字列が存在する場合(True)のみリストに残します。
    clean_lines = [line for line in lines if line.strip()]

    # 3. 整形された行を改行コードで結合する
    formatted_text = "\n".join(clean_lines)

    # 結果の出力
    print("--- 整形前のデータ(確認用) ---")
    print(f"'{raw_address_data}'")
    print("\n--- 整形後のデータ ---")
    print(formatted_text)

if __name__ == "__main__":
    main()

コードの解説

line.strip() による判定 strip() メソッドは、文字列の先頭と末尾にある空白文字(スペース、タブ、改行など)をすべて削除します。

  • 文字がある行: " Tokyo " -> "Tokyo" (Trueと評価される)
  • 空行またはスペースのみの行: " " -> "" (Falseと評価される)

この性質を利用し、if line.strip(): と記述することで、実質的なデータが含まれていない行をフィルタリングできます。

splitlines() の利点 split('\n') を使用した場合、最終行に改行コードが含まれていると空文字列がリスト末尾に追加されるなど、意図しない挙動になることがあります。splitlines() はこれらの境界ケースを適切に処理するため、行単位の処理にはこちらが適しています。

この処理は、CSVファイルの読み込み前処理や、ユーザー入力テキストの正規化など、多くのテキスト処理タスクで役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次