Python如何提取命令返回的表格数据并转换为字典格式
命令行固定格式表格转字典实现方案
核心处理逻辑
你拿到的这类固定分隔符(|做列分隔、-+做分割线)的表格输出,不需要引入额外第三方库,按固定步骤处理即可:
- 第一步清洗原始输出:把拿到的命令输出字符串按行拆分,过滤掉空行、执行的命令行、由
-和+组成的分隔线行,剩下的内容就是两行表头+若干行有效数据 - 第二步拼接表头字段:这个表格的表头是跨两行展示的,把同列的两行表头文本去前后空白后拼接,得到完整的字段名,比如第一列两行内容是
Shelf和Id,拼接后就是Shelf Id - 第三步解析数据行:把数据行按
|拆分后逐格去空白,和前面得到的字段名一一映射成键值对,按需做数字、布尔类型的转换即可 - 如果只需要你提到的三个字段,直接从解析完成的全量字典里取值组装就行,不需要保留所有字段。
可直接复用的代码
def parse_shelf_table(output_str: str) -> dict: raw_lines = [line.rstrip() for line in output_str.splitlines()] valid_lines = [] for line in raw_lines: # 跳过空行 if not line.strip(): continue # 跳过输入的命令行 if line.strip().startswith('~'): continue # 跳过分隔线 sep_check = line.replace('-', '').replace('+', '').strip() if not sep_check: continue valid_lines.append(line) # 拼接两行表头为完整字段名 header_part1 = [cell.strip() for cell in valid_lines[0].split('|')] header_part2 = [cell.strip() for cell in valid_lines[1].split('|')] field_names = [] for h1, h2 in zip(header_part1, header_part2): field_names.append(f"{h1} {h2}".strip()) # 解析数据行,若存在多行数据可循环处理valid_lines[2:]的所有行 data_cells = [cell.strip() for cell in valid_lines[2].split('|')] full_dict = dict(zip(field_names, data_cells)) # 按需做类型转换、提取需要的字段 target_dict = { "Shelf id": int(full_dict["Shelf Id"]), "MEMBER Type": full_dict["MEMBER Type"].lower(), "TID": full_dict["TID"] # 实际运行时会读取命令输出的真实TID值 } return target_dict # 测试验证 if __name__ == "__main__": cmd_output = """ ~ tidci TID_table rtrv_shelf -----+-----------------+---------+------+-------+--------+------+------+------- Shelf| IP | MEMBER |Prime |Members| Dup P |Dup P | TIDc | TID Id | Address | Type |ShId | Added | found |Count | | -----+-----------------+---------+------+-------+--------+------+------+------- 1 | d.d.d.d | Prime | 1 | 1 | FALSE | 0 | a | Sub_6500_3 -----+-----------------+---------+------+-------+--------+------+------+------- """ print(parse_shelf_table(cmd_output)) # 输出结果: {'Shelf id': 1, 'MEMBER Type': 'prime', 'TID': 'Sub_6500_3'},和期望格式完全一致
注意点
- 如果命令返回的表格有多行数据,把解析数据行的部分改成循环即可,最终返回字典列表
- 如果后续表格列顺序、格式有调整,只需要修改字段拼接、字段提取的对应逻辑就行,整体处理框架不用改动
- 所有命令执行后的输出直接存为字符串传入函数即可,不需要额外做文件落盘操作
内容的提问来源于stack exchange,提问作者HSHEKHAR
相关产品推荐
相关产品推荐

