Python统计文本START与END/区间行数 分类后导出Excel方法
文本块分类+导出Excel实现代码
核心实现思路
不依赖固定行号偏移,通过状态标记判断当前是否处于START和END /包裹的有效区间内,逐行遍历时统计区间内的非空动作行数量,再根据计数规则打分类标签:
- 区间内有效动作行=1 → 标记
P1 - 区间内有效动作行>1 → 标记
P2
完整可运行代码
如果使用pandas导出Excel,先安装依赖:
pip install pandas openpyxl
核心逻辑代码:
# 第一步:读取文件完成分类统计 result = [] in_block = False # 标记当前是否处于START/END包裹的块内 action_cnt = 0 # 统计当前块内的有效动作行数量 # 将下方文件路径替换为你实际的txt文件路径 with open('your_file.txt', 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() # 检测到块起始标记,重置计数器、开启块状态 if 'START' in stripped_line: in_block = True action_cnt = 0 continue # 检测到块结束标记,完成当前块分类并存入结果 if 'END /' in stripped_line: in_block = False result.append('P1' if action_cnt == 1 else 'P2') continue # 块内的非空行判定为有效动作行,计数+1 if in_block and stripped_line: action_cnt += 1 # 打印结果校验 print(result) # 第二步:导出为Excel单列文件 import pandas as pd df = pd.DataFrame({'Category': result}) df.to_excel('分类结果.xlsx', index=False)
轻量替代方案(无需安装pandas)
如果不想装pandas依赖,可以直接导出为csv格式,Excel原生支持打开csv文件,代码更精简:
import csv with open('分类结果.csv', 'w', encoding='utf-8-sig', newline='') as f: writer = csv.writer(f) writer.writerow(['Category']) for item in result: writer.writerow([item])
效果验证
用你提供的示例输入运行上述代码,控制台输出的分类结果为:
['P2', 'P1', 'P2', 'P2', 'P1']
导出的文件首行为列名Category,后续每行对应一个分类结果,完全匹配要求的格式。
内容的提问来源于stack exchange,提问作者The P Guy
相关产品推荐
相关产品推荐

