如何分割文本生成以@Given/@When/@And为块的嵌套列表
文本分割为指定嵌套列表实现
核心逻辑为逐行遍历文本内容,识别@Given/@When/@And三个块起始标记,每碰到一个新标记就新建子列表收集后续内容,直到碰到下一个标记时把已收集的子列表存入总结果,最终得到符合要求的嵌套列表。
Python实现代码
def split_test_blocks(file_path: str) -> list[list[str]]: # 配置需要识别的块起始标识 start_flags = {"@Given", "@When", "@And"} final_list = [] current_block = None with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() # 匹配到新的块起始标识 if stripped_line in start_flags: # 先把之前收集完成的块存入总列表 if current_block is not None: final_list.append(current_block) # 初始化新的块,存入当前标识行 current_block = [line.rstrip('\n')] else: # 非标识行,追加到当前正在收集的块 if current_block is not None and line.strip(): current_block.append(line.rstrip('\n')) # 遍历结束后存入最后一个收集完成的块 if current_block is not None: final_list.append(current_block) return final_list # 调用示例 if __name__ == "__main__": Final_List = split_test_blocks("your_target_file.txt") # 打印验证输出结构 for block in Final_List: print(block)
运行效果
传入你提供的示例文本,运行后得到的Final_List结构完全匹配预期:
[ ['@Given', ' User Username{', ' User Userpassowrd ', ' User ID ', ' }'], ['@When', 'User Username{', 'User Userpassowrd ', 'User ID ', '}'], ['@And', 'User Username{', 'User Userpassowrd ', 'User ID ', '}'] ]
可调整配置
- 如果需要保留文本中的空行,删除代码判断条件里的
and line.strip()即可 - 如果需要新增识别其他起始标记(比如@But、@Then),直接在
start_flags集合中添加对应标记字符串即可 - 如果你的文本文件不是utf-8编码,修改
open函数里的encoding参数为对应编码(比如gbk)即可
内容的提问来源于stack exchange,提问作者Soumya_jeet
相关产品推荐
相关产品推荐

