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

如何编写Python生成器将混合JSON与TSV格式数据转换为指定结构字典

混合JSON/TSV行格式文件解析实现

原有代码问题

你现有的代码直接使用pd.read_csv按制表符分隔读取整个文件是行不通的:JSON格式的行没有制表符,会被整体识别为第一列数据,TSV格式的行会被切分为多列,两类数据无法统一处理,后续逐列加载解析的逻辑自然也不生效。

实现思路

针对每行混合两种格式的特点,按以下逻辑处理:

  • 逐行读取数据,先尝试用JSON解析,如果解析成功直接返回合规字典
  • JSON解析失败的行判定为TSV格式,按制表符切割后映射到指定字段,注意将client_count字段转为整数类型
  • 整个逻辑封装为接收行迭代器的生成器,满足需求

完整实现代码

import json
import pandas as pd

def parse_mixed_lines(line_iterator):
    # 定义固定的字段顺序,对应TSV行的字段顺序
    FIELD_ORDER = ["company", "catch_phrase", "phone", "timezone", "client_count"]
    for line in line_iterator:
        # 去除首尾空白、换行符
        stripped_line = line.strip()
        if not stripped_line:
            continue
        # 先尝试解析为JSON
        try:
            row_dict = json.loads(stripped_line)
            yield row_dict
        except json.JSONDecodeError:
            # 解析失败则按TSV处理
            tsv_fields = [field.strip() for field in stripped_line.split('\t')]
            # 映射为字典,client_count转整数
            row_dict = dict(zip(FIELD_ORDER, tsv_fields))
            row_dict["client_count"] = int(row_dict["client_count"])
            yield row_dict

# 使用示例
if __name__ == "__main__":
    # 打开文件,文件对象本身就是行迭代器
    with open("file.data", "r", encoding="utf-8") as f:
        # 生成器直接传入pandas构建DataFrame
        df = pd.DataFrame(parse_mixed_lines(f))
    # 后续可以正常操作df
    print(df)

代码说明

  • 生成器的参数line_iterator可以接收任意行迭代对象,除了文件对象外,也可以传入提前读取好的行列表迭代器,适配性更强
  • 严格按照要求返回包含指定5个键的字典,JSON行保证结构合规直接返回,TSV行手动映射保证字段一致
  • 空行会自动跳过,避免异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:04