在Python中从文件中删除行

2024-04-28 10:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图删除包含特定字符串的特定行。

我有一个名为numbers.txt的文件,其中包含以下内容:

peter
tom
tom1
yan

我要删除的是文件中的tom,因此我制作了以下函数:

def deleteLine():
fn = 'numbers.txt'
f = open(fn)
output = []
for line in f:
    if not "tom" in line:
        output.append(line)
f.close()
f = open(fn, 'w')
f.writelines(output)
f.close()

输出为:

peter
yan

如您所见,问题在于函数deletetomtom1,但我不想删除tom1。我只想删除汤姆。这是我想要的输出:

peter
tom1
yan

有什么办法可以改变函数使之正确?


Tags: 文件函数字符串intxtcloseoutputline
3条回答

那是因为

if not "tom" in line

检查tom是否不是当前line的子字符串。但在tom1中,tom是一个子串。因此,它被删除。

您可能需要以下选项之一:

if not "tom\n"==line # checks for complete (un)identity
if "tom\n" != line # checks for complete (un)identity, classical way
if not "tom"==line.strip() # first removes surrounding whitespace from `line`

只是为了好玩,这里有一个两行。

lines = filter(lambda x:x[0:-1]!="tom", open("names.txt", "r"))
open("names.txt", "w").write("".join(lines))

挑战:有人为此贴了一行。

您还可以使用fileinput模块获得最可读的结果:

import fileinput
for l in fileinput.input("names.txt", inplace=1):
    if l != "tom\n": print l[:-1]

更改行:

    if not "tom" in line:

致:

    if "tom" != line.strip():

相关问题 更多 >