Pythonでファイルから行を削除する方法

Vaibhhav Khetarpal 2023年10月10日
  1. Pythonでファイルから特定の行を削除するために行番号を使用
  2. Pythonでファイルから最初または最後の行を削除
  3. 特定のテキストに一致する行を削除
  4. 特定の単語に一致する行を削除
  5. Pythonで指定されたファイルから最も短い行を削除
  6. Pythonで指定された特定のファイルからすべての行を削除
Pythonでファイルから行を削除する方法

データファイルの操作はPythonでサポートされ、許可されており、Pythonプログラミング言語の重要な部分を形成しています。ただし、Pythonには指定されたファイルから特定の行を削除する直接的な関数はありません。

このチュートリアルでは、Pythonでファイルから特定の行を削除するための異なる方法を示します。

特定の行を削除するこのタスクは、いくつかの異なるアプローチを使用して実装できます。

Pythonでファイルから特定の行を削除するために行番号を使用

方法1

この方法は、ユーザーが指定した行番号を使用して、Pythonの特定のファイルから行を削除します。

これにはforループ、readlines()メソッド、およびenumerate()メソッドを使用します。

以下は、ファイルの例であるtest.txtを取り上げます。その内容は以下の通りです。

Hello
My name is
Adam
I am
a 
good
singer
cricketer dancer

次のコードは、Pythonの特定のファイルから行を削除するためにenumerate()およびreadlines()メソッドを使用します。

l1 = []
with open("temp.txt", "r") as fp:
    l1 = fp.readlines()
with open("temp.txt", "w") as fp:
    for number, line in enumerate(l1):
        if number not in [4, 6]:
            fp.write(line)

上記のコードにより、次の変更が加えられます:

Hello
My name is
Adam
I am
good
cricketer dancer

コードの説明:

  1. 最初にファイルはreadモードで開かれます。
  2. 次に、指定されたファイルの内容がreadlines()関数を使用してリストに読み込まれます。
  3. ファイルはその後閉じられます。
  4. ファイルは再度開かれ、今度はwriteモードで開かれます。
  5. 次に、作成されたリストにforループとenumerate()関数が実装されます。
  6. if条件は行番号をチェックおよび選択するために使用されます。指定された行番号は削除されます。
  7. ファイルはその後閉じられます。

方法2

同じタスクを行番号を使用してファイルから行を削除するためにseek()メソッドを利用することもできます。上記の方法で言及されているtest.txtと同じファイルで作業します。

seek()メソッドを使用することで、同じファイルを2回開く必要はなくなり、より簡単で高速になります。

次のコードは、Pythonの特定のファイルから行を削除するためにseek()メソッドを使用します。

with open("temp.txt", "r+") as fp:
    lines = fp.readlines()
    fp.seek(0)
    fp.truncate()
    for number, line in enumerate(lines):
        if number not in [4, 6]:
            fp.write(line)

上記のコードにより、次の変更が加えられます:

Hello
My name is
Adam
I am
good
cricketer dancer

コードの説明:

  1. ファイルは読み取りと書き込みの両方の機能を提供するr+モードで開かれます。
  2. ファイルの内容はreadlines()関数を使用してリストに読み込まれます。
  3. seek()メソッドは、ポインタをリストの開始位置に移動するために使用されます。
  4. ファイルはその後truncate()メソッドを使用して切り詰められます。
  5. 次に、作成されたリストにforループとenumerate()関数が実装されます。
  6. if条件は行番号をチェックおよび選択するために使用されます。指定された行番号は削除されます。
  7. ファイルは閉じられます。

Pythonでファイルから最初または最後の行を削除

この方法を実装するために、ファイルの内容をリストに書き込む際にリストスライスを使用します。

たとえば、上記で言及した同じファイル(test.txt)から最初の行を削除します。

次のコードは、指定されたファイルから最初の行を削除します。

with open("temp.txt", "r+") as fp:
    lines = fp.readlines()
    fp.seek(0)
    fp.truncate()
    fp.writelines(lines[1:])

上記のコードにより、次の変更が加えられ、次の出力が提供されます:

My name is
Adam
I am
a 
good
singer
cricketer dancer

コードの説明:

  1. ファイルは読み取りと書き込みの両方の機能を提供するr+モードで開かれます。
  2. ファイルの内容はreadlines()関数を使用してリストに読み込まれます。
  3. seek()メソッドは、ポインタをリストの開始位置に移動するために使用されます。
  4. ファイルはその後truncate()メソッドを使用して切り詰められます。
  5. ファイルからすべての行が1行を除いてリストに書き込まれます。これはリストスライスを使用して実現されます。

特定のテキストに一致する行を削除

この方法は、特定のテキストを含む複数の行がある場合に利用できます。指定したテキストに一致する行を削除できます。

たとえば、上記の方法で使用されている同じファイル(test.txt)から特定のテキストに一致する行を削除します。

この方法は、特定のテキストを含む行を削除するタスクを実行するためにstrip()関数とwrite()関数を使用します。

次のコードは、Pythonで特定の特定の文字列に一致する行を削除します。

content = "cricketer dancer"
with open("temp.txt", "w") as fp:
    lines = fp.readlines()
    for line in lines:
        if line.strip("\n") != content:
            file.write(line)

上記のコードにより、次の変更が加えられ、次の出力が提供されます:

Hello
My name is
Adam
I am
a 
good
singer

特定の単語に一致する行を削除

文字列全体を一致させて行を削除する代わりに、行に含まれているかもしれない単語を見つけてからその行を削除しようとすることもできます。

たとえば、上記の方法で使用されている同じファイル(test.txt)から特定の特定の単語に一致する行を削除します。

この方法では、Pythonが提供するosモジュールを使用します。また、このタスクを実行するために別の新しいファイルを作成し、データを書き込みます。

次のコードは、Pythonで特定の特定の単語に一致する行を削除します。

import os

with open("temp.txt", "r") as input:
    with open("bb.txt", "w") as output:
        for line in input:
            if "cricketer" not in line.strip("\n"):
                output.write(line)
os.replace("bb.txt", "temp.txt")

上記のコードにより、次の変更が加えられ、次の出力が提供されます:

Hello
My name is
Adam
I am
a 
good
singer

Pythonで指定されたファイルから最も短い行を削除

その名前が示すように、この方法は指定されたファイルの最も短い行を見つけて削除します。このタスクを実行するためにlen()メソッドを使用します。

たとえば、上記の方法で使用されている同じファイル(test.txt)から最も短い行を削除します。

次のコードは、指定されたファイルから最も短い行を削除します。

with open("temp.txt", "r") as rf:
    lines = rf.readlines()
shortest = 1000
lineToDelete = ""
for line in lines:
    if len(line) < shortest:
        shortest = len(line)
        lineToDelete = line
with open("temp.txt", "w") as write_file:
    for line in lines:
        if line == lineToDelete:
            pass
        else:
            write_file.write(line)

Pythonで指定された特定のファイルからすべての行を削除

Pythonで特定のファイルのすべての行を削除するには、truncate()関数を使用できます。さらに、ファイルポインタはファイルの開始地点に設定されます。

次のコードは、Pythonで指定された特定のファイルからすべての行を削除します。

with open("temp.txt", "r") as fp:
    fp.truncate()
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn