Python删除文本文件匹配行时清空整个文件的问题如何解决
问题原因
- 判断逻辑倒置:现有代码仅在行内容和
VariableStore匹配时才写入文件,和「删除匹配行」的需求完全相反,匹配行以外的所有内容都会被丢弃 - 文件关闭操作位置错误:
new_file.close()被放在for循环的if判断分支内,要么第一次匹配到行写完就直接关闭文件,后续所有行都无法写入;如果全程没有匹配到的行,文件会一直处于未关闭状态,写入缓冲区的内容不会刷新到磁盘。再加上使用w模式打开文件时会先清空原文件内容,最终就会出现整个文件被清空的问题
修复代码
a_file = open("./Variables/TxtFile.txt", "r") lines = a_file.readlines() a_file.close() new_file = open("./Variables/TxtFile.txt", "w") for line in lines: # 仅写入不匹配的行,跳过匹配行即可实现删除效果 if line.strip("\n") != VariableStore: new_file.write(line) # 循环遍历所有行结束后,再统一关闭文件 new_file.close()
优化推荐写法
使用with上下文管理器自动处理文件的开闭操作,不需要手动调用close(),可以避免遗漏文件关闭导致的各类异常:
# 读取原文件所有行 with open("./Variables/TxtFile.txt", "r") as read_f: lines = read_f.readlines() # 写入过滤后的内容 with open("./Variables/TxtFile.txt", "w") as write_f: for line in lines: if line.strip("\n") != VariableStore: write_f.write(line)
内容的提问来源于stack exchange,提问作者DiscordHelp
相关产品推荐
相关产品推荐

