从 Python 中的文件中删除一行



我正在尝试删除包含特定字符串的特定行。

我有一个名为 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

我相信有一种更简单的方法,只是一个想法。(我的英语不是很好看!!

相关内容

  • 没有找到相关文章