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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:39:25