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

Python 2.6中如何以Pythonic方式转换含缺失数据的不规则ASCII表格为字典?

更Pythonic的ASCII表格转字典方案(适配Python 2.6)

针对你在Python 2.6环境下处理带缩进子条目、不规则列宽ASCII表格的需求,这里分享一个简洁优雅的实现思路,不用硬编码固定列宽:

核心思路

  1. 区分主条目(无缩进)和缩进子条目:通过判断行首是否有空格快速划分
  2. 利用str.split(None)自动处理不规则空白分割,把每行内容拆成字段列表
  3. 结合表头列名,将字段列表映射为字典,缺失的列自动填充空字符串
  4. 最后把主条目和子条目整合为目标结构

代码实现

def parse_indented_table(table_str):
    # 按行分割,过滤空行
    lines = [line.rstrip('\n') for line in table_str.splitlines() if line.strip()]
    if not lines:
        return {}
    
    # 解析表头
    headers = lines[0].split()
    num_cols = len(headers)
    
    result = {}
    indented_entries = []
    
    for line in lines[1:]:
        # 判断是否是缩进子条目
        is_indented = line.startswith(' ')
        # 分割字段,自动忽略任意空白
        fields = line.split(None)
        # 补全缺失的字段为空字符串
        fields += [''] * (num_cols - len(fields))
        # 构建行字典(Python 2.6不支持字典推导式,用dict(zip())实现)
        row_dict = dict(zip(headers, fields))
        
        if not is_indented:
            # 主条目,直接写入结果
            result.update(row_dict)
            # 初始化子条目列表
            result['indented_entries'] = indented_entries
        else:
            # 子条目添加到列表
            indented_entries.append(row_dict)
    
    return result

# 测试输入
table_content = """col1 col2 col3 col4
A     B           D
A1    B1    C1
A2    B2"""

# 运行并输出
parsed_result = parse_indented_table(table_content)
print(parsed_result)

代码说明

  • str.split(None):自动识别任意数量的空格、制表符作为分隔符,完美适配不规则列宽的场景
  • dict(zip(headers, fields)):考虑到Python 2.6不支持字典推导式,用zip把表头和字段配对后转成字典,是该版本里最简洁的映射方式
  • 缩进判断line.startswith(' '):简单直接地区分主/子条目,完全匹配你的表格格式
  • 字段补全逻辑:fields += [''] * (num_cols - len(fields))确保每个行字典的键和表头完全对应,缺失列自动填空字符串,完全符合目标格式要求

运行这段代码后,就能得到你想要的字典结构啦。

内容的提问来源于stack exchange,提问作者gtamorim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:26:51