在 Python 中从文件中删除特定行
- 在 Python 中使用行号从文件中删除特定行
- 在 Python 中从文件中删除第一行或最后一行
- 删除与给定特定文本匹配的行
- 删除与给定特定单词匹配的行
- 在 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
代码说明:
- 首先,文件以
read
模式打开。 - 然后在
readlines()
函数的帮助下,将给定文件中的内容读入一个列表。 - 然后关闭文件。
- 然后再次打开文件,但这次是在
write
模式下。 - 然后,对创建的列表执行
for
循环和enumerate()
函数。 if
条件用于检查和选择行号。提到的行号被删除。- 然后关闭文件。
方法二
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
代码说明:
- 文件以
r+
模式打开,允许读取和写入功能。 - 然后在
readlines()
函数的帮助下将文件内容读入列表。 - 然后使用
seek()
方法将指针移回列表的起点。 - 然后在
truncate()
方法的帮助下截断文件。 - 然后,对创建的列表执行
for
循环和enumerate()
函数。 if
条件用于检查和选择行号。提到的行号被删除。- 文件关闭。
在 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
代码说明:
- 文件以
r+
模式打开,允许读取和写入功能。 - 借助
readlines()
函数将文件内容读入列表。 - 然后使用
seek()
方法将指针移回列表的起点。 - 然后在
truncate()
方法的帮助下截断文件。 - 然后将文件中的所有行写入一个列表,但第一行除外。这在列表切片的帮助下成为可能。
删除与给定特定文本匹配的行
当有多行包含特定文本时,可以使用此方法。然后可以删除与给定文本匹配的行。
例如,我们将从上述方法中使用的同一文件(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 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