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
相关产品推荐
相关产品推荐

