Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでテキストファイルの重複行を削除する方法

Pythonでは、ファイル操作の機能を使うことで、テキストファイルや関数内に含まれる重複した行を簡単に削除できます。ここでは、例として「bar.txt」というテキストファイルを使用し、重複行を取り除いた結果を「foo.txt」という新しいファイルに保存する方法を解説します。

なお、処理対象となるテキストファイルは、Pythonスクリプトと同じディレクトリ(フォルダ)に配置しておく必要があります。異なる場所にある場合は、正しく動作しないので注意してください。

元データ(bar.txt)

今回使用するbar.txtの内容は以下の通りです。

A cow is an animal.
A cow is an animal.
A buffalo too is an animal.
Lion is the king of jungle.

このファイルには「A cow is an animal.」という行が2回出現しています。これを1行だけ残すように処理します。

サンプルコード

以下のコードは、bar.txtを読み込み、重複行を除外しながらfoo.txtに書き込むプログラムです。既に読み込んだ行を記録しておくためにset(集合)を使用しており、これにより各行の重複チェックを高速に行えます。

# bar.txtを開き、重複行を削除してfoo.txtに書き込むプログラム
lines_seen = set()  # 既に確認済みの行を保持するセット

with open('bar.txt', 'r', encoding='utf-8') as infile, \
     open('foo.txt', 'w', encoding='utf-8') as outfile:
    print("bar.txt の内容は以下の通りです")
    for line in infile:
        print(line, end='')
        if line not in lines_seen:  # 重複していない行のみ書き込む
            outfile.write(line)
            lines_seen.add(line)

print("foo.txt の内容は以下の通りです")
for line in open('foo.txt', 'r', encoding='utf-8'):
    print(line, end='')

ポイントは、lines_seenというsetオブジェクトです。ファイルから1行ずつ読み込む際に、その行がまだsetに存在しない場合だけ出力ファイルへ書き込み、同時にsetへ追加していきます。これにより、2回目以降に出現した同じ行は自動的にスキップされます。

また、with文を使うことで、ファイルのクローズ処理を自動的に行えるため、閉じ忘れによるリソースリークを防げます。

実行結果

プログラムを実行すると、重複行が削除されたfoo.txtには以下の内容が出力されます。

A cow is an animal.
A buffalo too is an animal.
Lion is the king of jungle.

このように、setとループ処理を組み合わせるだけで、数行のコードでテキストファイルの重複行除去を実現できます。ログファイルの整理やデータクレンジングなど、さまざまな場面で応用できる便利なテクニックなので、ぜひ活用してみてください。

  1. Python Tkinterのasksaveasfile()関数の使い方を徹底解説

    TkinterとはTkinterは、PythonでGUI(グラフィカルユーザーインターフェース)プログラミングを行うための標準モジュールです。キャンバス(Canvas)を作成し、その中にさまざまなプロパティや動作を持つUIコンポーネントを配置することで、アプリケーションの画面を構築していきます。本記事では、asksaveasfile()関数を使って、Pythonプログラムで作成したファイルをローカルドライブに保存する方法を解説します。処理の流れまず、ベースとなるウィンドウを作成し、その上にttk.Button関数を使ってボタンを配置します。次に、別の関数を定義し、その中でasksaveasfi

  2. Python Tkinterのaskopenfile()関数でファイルを選択して読み込む方法

    Pythonプログラムで使用するファイルのパスをハードコーディングする代わりに、GUIを使ってユーザー自身にフォルダ構造をブラウズさせ、目的のファイルを選択してもらうことができます。これはtkinterモジュールを利用することで実現でき、キャンバス(ウィンドウ)を定義し、その上にファイルを参照するためのボタンを配置します。以下のプログラムでは、ファイルを開くための関数を定義しています。ここではテキストファイルを開くことに限定しています。Pythonはテキストファイルの内容を読み取り、非常に読みやすい形で出力できるためです。.txtや.csvなど、テキストベースのファイルであればどのようなもので