在Python中从文件中删除一行

10 投票
5 回答
51435 浏览
提问于 2025-04-16 17:21

我想删除一个特定的行,这一行里包含一个特定的字符串。

我有一个文件叫做 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

你可以看到,问题是这个函数把 tomtom1 都删除了,但我不想删除 tom1。我只想删除 tom。我想要的输出结果是:

peter
tom1
yan

有没有什么办法可以修改这个函数,让它正确工作呢?

5 个回答

3

为了好玩,这里有一个两行代码可以做到这一点。

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]
4

这是因为

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`
12

把这一行:

    if not "tom" in line:

改成:

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

撰写回答