如何通过Python删除文本文件中指定行号的对应行?
实现思路
你已经完成了遍历、关键词匹配、用户交互的核心逻辑,注意不要直接在r+模式打开的原文件上原地删改行,很容易打乱文件指针导致内容损坏,最稳妥的方式是逐行读取源文件,按规则判断是否写入新的结果文件即可:
- 不匹配搜索关键词的普通行,默认写入结果文件,等价于保留原内容
- 匹配到关键词的行,根据用户输入做分支处理:
- 输入
d:直接跳过当前行,不写入结果文件,就实现了删除该行的效果 - 输入
s:将当前行写入你提前打开的text2.txt做单独存储,若不需要删除该行,正常写入结果文件即可
注意:文件操作完成后必须关闭文件句柄,否则写入的内容可能不会落盘,推荐使用with上下文管理器自动处理文件开关,避免遗漏。
- 输入
可直接运行的修正代码
search_phrase = "Test" target_delete_line = 2 # 配置需要按行号删除的行号,比如这里就是删第2行 # 同时打开三个文件:源文件读、匹配s选项的存储文件写、最终结果文件写 with open('text1.txt', 'r', encoding='utf-8') as src_f, \ open('text2.txt', 'w', encoding='utf-8') as save_f, \ open('text1_temp.txt', 'w', encoding='utf-8') as res_f: line_num = 0 for line in src_f.readlines(): line_num += 1 # 先处理按行号删除的逻辑:命中指定行号直接跳过,不写入结果 if line_num == target_delete_line: continue # 处理关键词匹配的交互逻辑 if search_phrase in line: print(f"Match found at line {line_num}") decision = input("enter letter corresponding to a decision: (d = delete lines, s = save to new txt) \n") if decision == 'd': # 跳过写入,等价于删除该行 continue if decision == 's': # 该行单独写入text2.txt save_f.write(line) # 所有没被跳过的行,统一写入最终结果文件 res_f.write(line) # 如果需要让处理后的结果直接覆盖原text1.txt,取消注释下面两行即可 # import os # os.replace('text1_temp.txt', 'text1.txt')
补充说明
- 你原来代码里写的
//是C/Java类语言的注释语法,Python单行注释需要用# - 用临时文件存储处理结果再替换原文件的方式,比原地读写安全很多,就算程序中途报错也不会损坏原文件
- 关键词判断直接用
in关键字比find() >=0写法更简洁,效果完全一致
内容的提问来源于stack exchange,提问作者Jayden Gu
相关产品推荐
相关产品推荐

