如何使用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
相关产品推荐
相关产品推荐

