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

如何使用Python删除文本文件中指定行号的内容

Python删除文本文件指定行号内容的实现方法

现有代码的错误点

  • 条件判断逻辑错误:counter != (i for i in [67,68,69]) 是将计数器和生成器对象做比较,结果永远为True,无法触发跳过指定行的逻辑
  • 文件关闭语句缩进错误:f.close() 写在for循环内部,第一次循环执行完就关闭了输出文件,后续行无法写入
  • 冗余代码:额外打开了_fileOne文件句柄但未使用,造成资源浪费
  • 缺失依赖导入:使用fileinput模块需要先导入,否则运行会报错

修复后的实现代码

推荐使用with上下文管理器自动管理文件句柄,避免手动关闭遗漏的问题:

f_in = 'Tendons_+Diagonals_Analysis1.tb'
f_out = 'Sample.tb'
# 待删除的行号存为集合,查询效率远高于列表,行号越多优势越明显
delete_lines = {67, 68, 69}

with open(f_in, 'r', encoding='utf-8') as fr, open(f_out, 'w', encoding='utf-8') as fw:
    # enumerate直接生成行号,start=1对应日常行号从1计数的习惯
    for line_num, line in enumerate(fr, start=1):
        if line_num not in delete_lines:
            fw.write(line)

如果要保留你原本用fileinput的写法,修复后版本如下:

import fileinput
f_in = 'Tendons_+Diagonals_Analysis1.tb'
f_out = 'Sample.tb'
delete_lines = {67, 68, 69}

f = open(f_out, 'w')
counter = 0
for line in fileinput.input([f_in]):
    counter += 1
    if counter not in delete_lines:
        f.write(line)
# 关闭文件操作移到循环外
f.close()

补充说明

  • 如果你的行号是从0开始计数的,把enumerate的start参数改成0即可
  • 如果文件编码不是utf-8,对应修改open方法的encoding参数即可

内容的提问来源于stack exchange,提问作者Mohamad Dabdoub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:36:03