在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
你可以看到,问题是这个函数把 tom 和 tom1 都删除了,但我不想删除 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():