Python处理文本文件:按#规则分组生成列表 排除Stream Number类头行
分组拆分正确实现
修复思路
对应原代码的两处核心缺陷做针对性调整:
- 过滤规则升级:识别到包含
#Stream Number的行直接跳过,既不纳入结果列表,也不触发分组切分 - 目标ID行处理:将紧跟Stream头行、不含
Stream Number字样的带#行作为新分组的首元素,不再将其排除在分组外
可直接运行的代码
with open('your_file.txt', 'r', encoding='utf-8') as f: lines = f.readlines() master_list = [] current_group = [] for raw_line in lines: # 去除首尾空白、换行符,规避格式干扰 line = raw_line.strip() # 跳过文件中可能存在的空行 if not line: continue # 直接跳过所有需排除的Stream头行 if '#Stream Number' in line: continue # 遇到非Stream类的带#目标ID行:完成上一组的存入、开启新组 if '#' in line: if current_group: master_list.append(current_group) current_group = [line] # 普通无#数据行追加到当前组 else: if current_group: current_group.append(line) # 手动存入最后一组,避免末尾分组漏存 if current_group: master_list.append(current_group)
通用适配说明
代码可适配长度可变、行内容动态调整的文件场景,额外做了三类兼容处理:
- 逐行做去首尾空白处理,避免行末尾空格、换行符导致的字符串匹配错误
- 增加空行跳过逻辑,兼容文件中插入无意义空行的情况
- 增加异常边界判断,避免文件开头无前置ID行就出现普通数据行时的列表报错
示例输出(针对给定测试文件)
运行代码后master_list的结构为:
[ ["#944_testing_1)#", "Data1", "133", "124", "FRE", "new", "Cable", "Sat"], ["#94_fr_change#", "DataB", "233", "445", "DEU", "Old", "Sat"], ["#822_Sports_(FR)#", "MyValue", "4566", "455", "ITA", "NEW"] ]
内容的提问来源于stack exchange,提问作者LinuxFighter
相关产品推荐
相关产品推荐

