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

Python删除txt指定学号及后续三行内容却清空整个文件问题排查

问题原因
  • 写入逻辑完全倒置:你需要删除匹配学号的对应四条数据(学号+三个后续字段),正确逻辑是未匹配到目标学号时才把四条数据写入临时文件,原代码刚好反过来,只写入匹配到的目标数据,其他全部丢弃,最终导致文件几乎为空。
  • 换行符导致匹配失效:input()返回的输入内容末尾不带换行符,而readline()读取的每行内容末尾自带\n,直接比对studentnr == søk永远返回False,所有数据都不会写入临时文件,最终文件被清空。
  • 状态标记逻辑错误:原代码把「未匹配到学号」的情况设置为funnet=True,完全不符合功能预期,后续的操作提示逻辑也会全部出错。
  • 退出代码语法错误:末尾的quit没有加调用括号(),永远不会执行退出操作。
修复后可正常运行的代码
import os

def slett():
    funnet = False
    søk = input('Søk etter studentnr')
    # 用with自动管理文件句柄,避免漏关文件
    with open('student.txt', 'r', encoding='utf-8') as studentfil, open('tempfil.txt', 'w', encoding='utf-8') as temp_fil:
        studentnr = studentfil.readline()
        while studentnr != '':
            # 给学号也去掉末尾换行,和输入格式对齐
            studentnr_stripped = studentnr.rstrip('\n')
            fornavn = studentfil.readline().rstrip('\n') 
            etternavn = studentfil.readline().rstrip('\n')
            studie = studentfil.readline().rstrip('\n')
            # 匹配到目标就跳过写入,相当于删除
            if studentnr_stripped != søk:
                temp_fil.write(f'{studentnr_stripped}\n')
                temp_fil.write(f'{fornavn}\n')
                temp_fil.write(f'{etternavn}\n')
                temp_fil.write(f'{studie}\n')
            else:
                # 匹配到目标才标记为已找到
                funnet = True
            studentnr = studentfil.readline()

    os.remove('student.txt')
    os.rename('tempfil.txt', 'student.txt')

    if funnet:
        print('Filen er oppdatert')
        print('Hva vil du gjøre nå? 1 - Slett på nytt, 2 - tilbake til meny, 3 - Avslutt program')
        velg4 = input('Velg her')
        if velg4 == '1':
            print('Slett på nytt')
            slett()
        elif velg4 == '2':
            print('Tilbake til meny')
        elif velg4 == '3':
            print('Avslutt')
        else:
            # 加上调用括号才会执行退出
            quit()
    else:
        print('Studentnr ikke gjenkjent')

slett()
补充说明

新增了with语句管理文件句柄,不需要手动调用close(),避免异常场景下文件泄漏的问题,你也可以根据需求保留原来的手动关闭写法,不影响核心功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:45:08