【问题标题】:How do I remove an entire line with a specific word, from a text file?如何从文本文件中删除包含特定单词的整行?
【发布时间】:2017-01-13 11:44:29
【问题描述】:

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

锅 2000

德里克 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', '') 正如其他论坛所建议的那样,但它不起作用。

注意事项:

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

【问题讨论】:

标签: python


【解决方案1】:

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

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()

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

【讨论】:

  • 您的链接有误,无法正常工作。 :)
  • 谢谢,显然我无法复制和粘贴 :) 现在应该可以了。
  • 已经去那里了。如果你想创建一个 for 循环让它工作,你不应该处于读取模式吗?
  • 没关系,另一个答案有效!由于不熟悉的“截断”和“搜索”,当我第一次遇到该线程时我忽略了这一点,但现在我尝试了它,它现在可以工作了:)肯定会让自己熟悉这些术语,因为我不喜欢复制粘贴其他人的代码
  • 根据链接中的讨论,我编辑了我的答案以包含几行你想要的内容。我希望这会有所帮助:)
【解决方案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+' '),或者您可以组合某种正则表达式。

【讨论】:

  • 谢谢,这行得通。我更喜欢这个解决方案,因为它更简单,更容易理解。我想知道为什么我尝试了一段时间但出现了一条错误消息,因为在写入模式下我无法使 for 循环工作。但现在它起作用了!我真的不知道为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多