如何从文本文件中删除包含特定单词的整行?

时间:2017-01-13 11:44:29

标签: python

我制作了一个名为contacts.txt的文本文件,其中包含:

  

pot 2000

     

derek 45

     雪55

我想获取要删除的联系人的用户输入(名称),并删除包含该名称的整行。到目前为止,这就是我所做的:

# ... previous code
if int(number) == 5:
    print "\n"
    newdict = {}
    with open('contacts.txt','r') as f:
        for line in f:
            if line != "\n":
                splitline = line.split( )
                newdict[(splitline[0])] = ",".join(splitline[1:])
    print newdict
    removethis = raw_input("Contact to be removed: ")
    if removethis in newdict:
        with open('contacts.txt','r') as f:
            new = f.read()
        new = new.replace(removethis, '')
        with open('contacts.txt','w') as f:
            f.write(new)

当我输入“pot”时,我回到文本文件中,只删除“pot”,“2000”停留在那里。我试过了

new = new.replace(removethis + '\n', '')正如其他论坛建议的那样,但它不起作用。

注意:

  • 我在其他论坛上阅读的所有内容都要求我制作一个新文件,但我不希望这样;我只想要一个文件。
  • 我第一次打开文件并插入一个for循环时只尝试了'r +',它只选择不包含输入字的行,但它也不起作用。

2 个答案:

答案 0 :(得分:3)

我看到你说这不是重复,但是这个讨论不等同于你的问题吗?

Deleting a specific line in a file (python)

根据链接中的讨论,我从您的输入中创建了一个.txt文件(使用您提供的用户名)并运行以下代码:

filename = 'smp.txt'

f = open(filename, "r")
lines = f.readlines()
f.close()

f = open(filename, "w")
for line in lines:
  if line!="\n":
    f.write(line)
f.close()

这样做是为了删除线之间的空格。 在我看来,这就像你想要的那样。

答案 1 :(得分:2)

这个怎么样:

  • 将文件中的所有行读入列表
  • 写出每一行
    • 跳过要删除的行

这样的事情:

filename = 'contacts.txt'
with open(filename, 'r') as fin:
    lines = fin.readlines()
with open(filename, 'w') as fout:
    for line in lines:
        if removethis not in line:
           fout.write(line)

如果你想更准确地删除你删除的行,你可以使用if not line.startswith(removethis+' '),或者你可以将某种正则表达式放在一起。