You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:06:23