如何实现读取TXT文件中(Read)标记之间的行内容,基于File.ReadLines实现
功能实现方案
核心逻辑
- 逐行读取目标TXT文件,维护一个是否处于读取区间的状态位,初始为false
- 逐行校验内容,匹配
(Read)标记时切换状态:- 首次匹配到
(Read)时,将状态位设为true,跳过当前标记行 - 第二次匹配到
(Read)时,将状态位设为false,可直接终止读取节省性能
- 首次匹配到
- 状态位为true时,将当前行存入结果集
- 读取完成后直接返回结果集即可
Python 代码实现
def read_lines_between_marks(file_path, start_end_mark="(Read)"): res = [] in_read_range = False with open(file_path, "r", encoding="utf-8") as f: for line in f: strip_line = line.strip() if strip_line == start_end_mark and not in_read_range: in_read_range = True continue if strip_line == start_end_mark and in_read_range: break if in_read_range: # 如需保留原始换行,改为 res.append(line) 即可 res.append(line.rstrip("\n")) return res # 调用示例 if __name__ == "__main__": content = read_lines_between_marks("test.txt") for line in content: print(line)
C# 代码实现
using System; using System.Collections.Generic; using System.IO; public static class FileTool { public static List<string> ReadLines(string filePath) { var res = new List<string>(); bool inReadRange = false; const string MARK = "(Read)"; foreach (var line in File.ReadLines(filePath)) { var trimLine = line.Trim(); if (trimLine == MARK && !inReadRange) { inReadRange = true; continue; } if (trimLine == MARK && inReadRange) { break; } if (inReadRange) { res.Add(line); } } return res; } } // 调用示例:FileTool.ReadLines(@"你的文件路径")
兼容调整说明
- 若要求标记严格匹配(前后不能有空白字符),删除代码中
.Trim()/.strip()方法即可 - 若文件仅存在单个
(Read)标记,当前实现会返回标记后到文件末尾的所有内容,如需改为返回空,可在读取完成后判断是否匹配到第二个标记,未匹配到则返回空列表 - 若有多个
(Read)标记对,可调整逻辑不要在匹配到第二个标记时break,继续遍历切换状态即可提取多段内容
内容的提问来源于stack exchange,提问作者ZeMeekGeek
相关产品推荐
相关产品推荐

