如何使用Python提取文本文件中两个分隔字符串之间的多段内容
问题说明
你原有代码的嵌套while循环会触发死循环:进入row_start=True状态后没有退出条件,会一直重复插入当前行,不会跳到下一行处理。
因为你总共有16个分段,不建议单独定义16个独立变量,用一个总列表存储所有分段更便于后续遍历处理,实现代码如下:
with open(txt_file_path, 'r', encoding='utf-8') as f: # 提前去掉每行末尾的换行符,避免后续处理冗余空白 lines = [line.rstrip('\n') for line in f] sections = [] # 所有分段按顺序存在这里,sections[0]就是section1,sections[1]是section2,以此类推 temp_block = [] in_table = False # 标记是否已经进入表格区域,跳过开头的YAML标题段 for line in lines: # 判断当前行是不是表格分隔线 if line.startswith('+') and ('-----' in line or '=====' in line): # 如果已经在收集内容,遇到分隔线就把当前收集的块存到总列表,清空临时列表准备下一段 if in_table and temp_block: sections.append(temp_block) temp_block = [] in_table = True # 第一次遇到分隔线就标记进入表格区域 continue # 直接跳过分隔线,不存入结果 # 只有在表格区域内、且是表格内容行(以|开头)才会被收集 if in_table and line.startswith('|'): # 如果需要去掉行尾的# Section注释,就放开下面这行,不需要的话直接append(line)即可 # line = line.split('#')[0].rstrip() temp_block.append(line) # 循环结束后,最后一个未处理的分段也要加入总列表 if temp_block: sections.append(temp_block) # 如果需要单独赋值给指定变量,可手动映射: section_1_list = sections[0] section_2_list = sections[1]
逻辑说明
- 自动跳过开头的YAML标题区域,只处理表格范围内的内容
- 所有以
+开头的分隔线会被直接过滤,不会存入结果列表 - 按分隔线自动拆分分段,16个分段会按顺序存在
sections列表中,用下标即可访问对应分段的内容 - 可选支持自动删除行尾的注释内容,按需启用对应代码行即可
内容的提问来源于stack exchange,提问作者user16549853
相关产品推荐
相关产品推荐

