You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现txt文件含指定内容时删除对应行的代码修正

问题根因

代码运行后文件被清空、删除逻辑失效是三个问题导致的:

  • 读取文件时传入的文件名多了尾部空格:"student.txt ",实际没有读取到目标student.txt的内容,拿到的lines是空列表,后续写入操作直接覆盖清空了原文件
  • 写入逻辑完全缺失:w模式打开文件会先清空原有内容,你只需要把不包含目标学号、不需要删除的行写回文件即可,命中要删除的行直接跳过,不需要额外处理
  • 直接用w in line做判断存在误匹配风险:比如输入学号123时,学号1234的行也会被命中删除,建议拆分每行字段后精确匹配学号位
可直接运行的正确代码
target_id = input("Enter STnumber: ").strip()

# 读取原文件所有行,注意文件名不要加多余空格
with open("student.txt", "r", encoding="utf-8") as read_f:
    all_lines = read_f.readlines()

# 写回时仅保留不需要删除的行
with open("student.txt", "w", encoding="utf-8") as write_f:
    for line in all_lines:
        # 跳过空行避免报错
        stripped_line = line.strip()
        if not stripped_line:
            continue
        # 拆分字段,每行最后一个元素是学号,做精确匹配
        stu_id = stripped_line.split()[-1]
        if stu_id != target_id:
            # 非目标行写回,自动补全换行符
            write_f.write(line if line.endswith("\n") else line + "\n")
最简逻辑(无精确匹配需求时使用)

如果确认文件内容不存在学号子串重复的情况,可以简化判断逻辑,不需要嵌套with块,核心逻辑就是命中目标行直接跳过,其余行写回,刚好补上你代码里空缺的判断部分:

w = input("Enter STnumber: ")
with open("student.txt", "r") as f:
    lines = f.readlines()
with open("student.txt", "w") as f:
    for line in lines:
        # 不匹配要删除的学号时才写回文件
        if w not in line:
            f.write(line)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:27:18