如何移除文件中两个指定分隔符行之间所有行开头的//注释
问题分析
原代码存在以下逻辑错误:
- 遍历列表的同时调用
index()方法获取行位置,存在重复行时会返回错误索引,同时频繁调用index()会大幅降低处理效率 - while循环内的索引递增逻辑混乱,每次循环同时修改当前行和下一行,且未对DELIMITER_END行本身做去注释处理
- 提前在循环内调用
write()写入文件,会导致内容重复写入,且未处理分隔符块外的行 - 没有设置全局状态标记,无法处理文件中存在多个分隔符块的场景
正确实现方案
采用状态标记法逐行处理,不需要修改原列表,逻辑清晰可兼容多分隔符块场景:
DELIMITER_START = "DELIMITER_START" DELIMITER_END = "DELIMITER_END" # 读取原文件所有行 with open("input.txt", "r", encoding="utf-8") as f: lines = f.readlines() in_block = False # 标记当前是否处于分隔符块内 output_lines = [] for line in lines: # 先判断是否进入起始分隔符行 if DELIMITER_START in line: in_block = True # 处于块内的行移除开头的//,如果需要匹配示例的行首空格可以改成 processed_line = " " + line[2:] if in_block and line.startswith("//"): processed_line = line[2:] else: processed_line = line output_lines.append(processed_line) # 判断是否离开结束分隔符行,放在处理逻辑之后保证END行本身也被去注释 if DELIMITER_END in line: in_block = False # 统一写入输出文件 with open("output.txt", "w", encoding="utf-8") as f: f.writelines(output_lines)
效果说明
如果开启行首空格配置,处理后的输出会和你给出的示例完全匹配,块外的行保留//前缀,块内的行移除//且补充两个空格占位,同时支持文件内存在多组DELIMITER_START/DELIMITER_END组合的场景。
内容的提问来源于stack exchange,提问作者Hionut
相关产品推荐
相关产品推荐

