我正在尝试删除包含特定字符串的特定行。
我有一个名为 numbers 的文件.txt其中包含以下内容:
彼得
汤姆
汤姆1
燕
我想从文件中删除的是那个 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。我想删除汤姆。这是我想要的输出:
彼得
汤姆1
燕
有什么想法可以更改功能以使其正确吗?
更改行:
if not "tom" in line:
自:
if "tom" != line.strip():
那是因为
if not "tom" in line
检查,tom
是否不是当前line
的子字符串。但在tom1
中,tom
是一个子字符串。因此,它被删除。
您可能需要以下其中一项:
if not "tomn"==line # checks for complete (un)identity
if "tomn" != 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 != "tomn": print l[:-1]
您可以使用正则表达式。
import re
if not re.match("^tom$", line):
output.append(line)
$
表示字符串的结尾。
我是编程和 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
我相信有一种更简单的方法,只是一个想法。(我的英语不是很好看!!