Python 3.7如何删除txt文件中开头重复的行且无需安装额外模块
报错原因
- 遍历
lines列表的过程中直接执行del lines[i]删除元素,会导致列表实际长度持续变短,但循环用的是最初lines[:-1]的索引范围,删除若干元素后,i+1就会超出当前lines的实际长度,触发索引越界错误。 - 代码还存在两个额外问题:1. 缩进错误,
for循环的缩进层级超过了上方的lines赋值行;2. 没有提前打开final_file对应的输出文件对象,直接调用write方法会报错。
修复后的可运行代码
完全基于Python标准库实现,不需要安装任何第三方模块,兼容Python 3.7版本:
with open("resultFile.txt", "r") as result_file, open("final_result.txt", "w") as final_file: # 用字典存储每个测试项的最后一次结果,Python 3.7+字典默认保留插入顺序 test_result = {} for line in result_file: # 跳过空行 if not line.strip(): continue # 提取测试名作为key,maxsplit=1避免行内空格影响拆分 test_name = line.split(maxsplit=1)[0] # 重复的测试名直接覆盖,最终保留的就是最后一次出现的结果 test_result[test_name] = line # 按测试项出现顺序写入最终结果 for line in test_result.values(): final_file.write(line)
优化建议
- 不要在遍历列表的同时修改列表长度,极容易出现索引异常,用字典存储的方案逻辑更简单,也不需要提前把所有行读到内存中,即使是超大的结果文件也能正常运行。
- 提取前缀时保留
maxsplit=1的参数,可以避免行内容里有空格时拆分出错。 - 增加空行判断逻辑,可以避免源文件里的空行、全空格行被当成有效内容处理。
内容的提问来源于stack exchange,提问作者ComradeH
相关产品推荐
相关产品推荐

