在Python中从文件中删除一行

时间:2011-05-10 09:14:44

标签: python string file line

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

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

有任何改变功能的想法是为了正确吗?

5 个答案:

答案 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

我确信有一种更简单的方法,只是这是一个想法。 (我的英文看起来不太好!!)