Python中如何解析报表文件的多行表头并获取对应数据?
合并两行表头并提取报表数据的方案
当然可以通过合并两行表头来精准匹配数据,替代靠标记的粗糙方式,具体步骤如下:
1. 表头合并规则
观察报表的两行表头,对应关系很明确:
- 第一行的
Source和Destination下方无二级表头,直接保留原名称 - 第一行的
Arrival对应第二行的Expected和Actual,合并为Arrival Expected、Arrival Actual - 第一行的
Departure对应第二行的Expected和Actual,合并为Departure Expected、Departure Actual
最终合并后的完整表头为:Source、Arrival Expected、Arrival Actual、Departure Expected、Departure Actual、Destination
2. 具体实现(以Python为例)
步骤1:解析报表文本并合并表头
# 原始报表文本 report_text = """Source Arrival Arrival Departure Departure Destination Expected Actual Expected Actual X 10:00 10:15 10:10 10:25 Z A 8:30 8:30 8:45 8:50 B""" # 拆分并清洗行数据 lines = [line.strip() for line in report_text.split('\n') if line.strip()] # 提取两行表头 header_row1 = lines[0].split() header_row2 = lines[1].split() # 按对应规则合并表头 merged_headers = [ header_row1[0], f"{header_row1[1]} {header_row2[0]}", f"{header_row1[2]} {header_row2[1]}", f"{header_row1[3]} {header_row2[2]}", f"{header_row1[4]} {header_row2[3]}", header_row1[5] ]
步骤2:提取数据并映射到表头
# 处理数据行,生成结构化字典 records = [] for data_line in lines[2:]: data_values = data_line.split() # 将数据与合并后的表头一一对应 record = dict(zip(merged_headers, data_values)) records.append(record)
运行后得到的结构化数据示例:
{'Source': 'X', 'Arrival Expected': '10:00', 'Arrival Actual': '10:15', 'Departure Expected': '10:10', 'Departure Actual': '10:25', 'Destination': 'Z'} {'Source': 'A', 'Arrival Expected': '8:30', 'Arrival Actual': '8:30', 'Departure Expected': '8:45', 'Departure Actual': '8:50', 'Destination': 'B'}
步骤3:生成HTML表格
基于结构化数据直接生成HTML表格,确保数据与表头准确对应:
# 拼接HTML表格代码 html_table = """<table border="1"> <thead> <tr>""" + ''.join([f"<th>{h}</th>" for h in merged_headers]) + """ </tr> </thead> <tbody>""" for record in records: html_table += """ <tr>""" + ''.join([f"<td>{record[h]}</td>" for h in merged_headers]) + """ </tr>""" html_table += """ </tbody> </table>"""
生成的HTML表格会直接展示合并后的完整表头,以及对应的数据内容,不需要依赖标记定位。
内容的提问来源于stack exchange,提问作者Yadu Krishnan
相关产品推荐
相关产品推荐

