Python 2.6中如何以Pythonic方式转换含缺失数据的不规则ASCII表格为字典?
更Pythonic的ASCII表格转字典方案(适配Python 2.6)
针对你在Python 2.6环境下处理带缩进子条目、不规则列宽ASCII表格的需求,这里分享一个简洁优雅的实现思路,不用硬编码固定列宽:
核心思路
- 区分主条目(无缩进)和缩进子条目:通过判断行首是否有空格快速划分
- 利用
str.split(None)自动处理不规则空白分割,把每行内容拆成字段列表 - 结合表头列名,将字段列表映射为字典,缺失的列自动填充空字符串
- 最后把主条目和子条目整合为目标结构
代码实现
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
相关产品推荐
相关产品推荐

