You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python删除文本文件自定义内容:代码无报错但未删除目标行

问题分析与修复方案

我来帮你看看问题出在哪~你的代码逻辑有几个关键的小错误,导致删除功能没生效:

核心问题点

  • 错误拆分联系人名称to_Delete=list(contact_to_delete)会把输入的名字拆成单个字符的列表(比如输入"Bob"会变成['B','o','b']),这完全不是你想要的匹配目标,应该直接使用输入的字符串。
  • 遍历字符而非行content = file.read()把整个文件读成一个字符串,for line in content是逐个遍历字符,而不是逐行处理联系人数据,这就导致你根本没在操作每一行的联系人信息。
  • 逻辑判断混乱if not any(line in line for line in to_Delete)里的变量名重复(两个line),而且逻辑完全错误,既没正确匹配联系人名称,也没筛选出要保留的行。
  • 文件写入方式错误:用r+模式打开文件后,直接写入会追加到文件末尾,而且原内容还在,应该先收集所有需要保留的行,再覆盖写入文件。

修复后的代码

def Delete_con(): 
    contact_to_delete = input("Enter the name to delete from contacts: ") 
    # 收集所有需要保留的行
    lines_to_keep = []
    with open("phonebook1.txt", "r") as file: 
        # 逐行读取文件
        for line in file.readlines():
            # 检查当前行是否不包含要删除的联系人名称(可根据实际格式调整匹配逻辑,比如startswith)
            if contact_to_delete not in line.strip():
                lines_to_keep.append(line)
    
    # 将保留的行写回文件,覆盖原内容
    with open("phonebook1.txt", "w") as file:
        file.writelines(lines_to_keep)
    
    print(f"Contact '{contact_to_delete}' has been deleted successfully!")

代码说明

  1. 直接使用输入的contact_to_delete字符串作为匹配目标,不需要转成列表。
  2. readlines()逐行读取文件内容,确保每一次循环处理的是一个联系人的行数据。
  3. 通过contact_to_delete not in line.strip()筛选出不包含目标名称的行(如果你的通讯录每行格式是姓名:电话号码,也可以用not line.startswith(contact_to_delete + ":")来更精准匹配)。
  4. 先读取并筛选要保留的行,再用w模式打开文件覆盖写入,这样就能彻底删除目标行。

内容的提问来源于stack exchange,提问作者Franky Padilla

火山引擎 最新活动