在 Python 中从文件中删除特定行

Vaibhhav Khetarpal 2023年1月30日 2022年5月17日
  1. 在 Python 中使用行号从文件中删除特定行
  2. 在 Python 中从文件中删除第一行或最后一行
  3. 删除与给定特定文本匹配的行
  4. 删除与给定特定单词匹配的行
  5. 在 Python 中删除给定文件中的最短行
  6. 从 Python 中的给定特定文件中删除所有行
在 Python 中从文件中删除特定行

Python 支持和允许数据文件处理,它构成了 Python 编程语言的重要组成部分。但是,Python 中没有任何直接函数可以删除给定文件中的特定行。

本教程演示了在 Python 中从文件中删除特定行的不同方法。

可以借助几种不同的方法来实现删除特定行的任务。

在 Python 中使用行号从文件中删除特定行

方法一

如上所述,此方法利用用户指定的行号从 Python 中的特定文件中删除一行。

它使用了 for 循环、readlines() 方法和 enumerate() 方法。

让我们以一个名为 test.txt 的示例文件为例,其内容如下所述。

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

以下代码使用 enumerate()readlines() 方法从 Python 中的特定文件中删除一行。

l1 = []
with open(r"C:\test\test.txt", 'r') as fp:
    l1 = fp.readlines()
with open(r"C:\test\test.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. 然后关闭文件。

方法二

seek() 方法也可用于执行使用行号从文件中删除行的相同任务。我们将使用上述方法中提到的同一个文件 test.txt

通过使用 seek() 方法,我们无需两次打开同一个文件,从而更轻松、更快捷。

以下代码使用 seek() 方法从 Python 中的特定文件中删除一行。

with open(r"C:\test\test.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)中删除第一行。

以下代码从 Python 中的给定文件中删除第一行。

with open(r"C:\test\test.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. 然后将文件中的所有行写入一个列表,但第一行除外。这在列表切片的帮助下成为可能。

删除与给定特定文本匹配的行

当有多行包含特定文本时,可以使用此方法。然后可以删除与给定文本匹配的行。

例如,我们将从上述方法中使用的同一文件(test.txt)中删除与给定特定文本匹配的行。

该方法利用 strip() 函数和 write() 函数来实现删除包含某些给定文本的行的任务。

以下代码删除与 Python 中给定特定字符串匹配的行。

with open(r"C:\test\test.txt", 'r') as file:
content = "cricketer dancer"
with open(r"C:\test\test.txt", 'w') as file:
    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(r"C:\test\test.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', 'aa.txt')

上面的代码进行了以下更改并提供了以下输出:

Hello
My name is
Adam
I am
a 
good
singer

在 Python 中删除给定文件中的最短行

顾名思义,此方法查找并删除给定文件的最短行。在这里,我们将使用 len() 方法来实现此任务。

例如,我们将从上述方法中使用的同一文件(test.txt)中删除最短的行。

以下代码在 Python 中删除给定文件中的最短行。

with open(r"C:\test\test.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(r"C:\test\test.txt",'w') as write_file:
    for line in lines:
        if line == lineToDelete:
            pass
        else:
            write_file.write(line)

从 Python 中的给定特定文件中删除所有行

要在 Python 中删除特定文件的所有行,我们可以使用 truncate() 函数。此外,文件指针然后被设置回文件的开头。

以下代码从 Python 中的给定特定文件中删除所有行。

with open(r"C:\test\test.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

相关文章 - Python File