我正在尝试删除包含特定字符串的特定行。
我有一个名为 numbers.txt 的文件,其中包含以下内容:
彼得
汤姆
TOM1
炎
我要删除的是文件中的 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()
输出结果为:
彼得
炎
正如您所看到的,问题是功能删除 tom 和 tom1 ,但我不想删除 tom1 。我想删除 tom 。这是我想要的输出:
彼得
TOM1
炎
有任何改变功能的想法是为了正确吗?
答案 0 :(得分:12)
更改行:
if not "tom" in line:
为:
if "tom" != line.strip():
答案 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`
答案 2 :(得分: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]
答案 3 :(得分:1)
您可以使用正则表达式。
import re
if not re.match("^tom$", line):
output.append(line)
$
表示字符串的结尾。
答案 4 :(得分:0)
我是编程和python的新手(几个月)......这是我的解决方案:
import fileinput
c = 0 # counter
for line in fileinput.input("korrer.csv", inplace=True, mode="rb"):
# the line I want to delete
if c == 3:
c += 1
pass
else:
line = line.replace("\n", "")
print line
c +=1
我确信有一种更简单的方法,只是这是一个想法。 (我的英文看起来不太好!!)