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

如何读取含JSON结构的文本文件并生成指定格式的DataFrame

解决方案

你可以通过逐行解析文本、拆分用户字段、解析JSON地址段的方式生成目标DataFrame,以下是可直接运行的代码:

import pandas as pd
import json

def parse_custom_log(file_path):
    result_rows = []
    cur_user_info = None
    cur_json_lines = []
    
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            
            # 识别新记录的起始行
            if '| homeAddress =' in stripped_line:
                # 保存上一条完整记录
                if cur_user_info and cur_json_lines:
                    addr_dict = json.loads(''.join(cur_json_lines))
                    cur_user_info.update({
                        "city": addr_dict["city"],
                        "housenumber": addr_dict["houseNumber"],
                        "housenumber_addition": addr_dict["houseNumberAddition"],
                        "postalcode": addr_dict["postalCode"],
                        "street": addr_dict["street"],
                        "typename": addr_dict["__typename"]
                    })
                    result_rows.append(cur_user_info)
                
                # 拆分用户名字段
                user_part, addr_start = stripped_line.split('| homeAddress =', 1)
                un1, un2 = user_part.strip().split(':', 1)
                cur_user_info = {"username1": un1.strip(), "username2": un2.strip()}
                cur_json_lines = [addr_start.strip()]
            else:
                # 追加JSON内容行
                cur_json_lines.append(stripped_line)
        
        # 处理最后一条记录
        if cur_user_info and cur_json_lines:
            addr_dict = json.loads(''.join(cur_json_lines))
            cur_user_info.update({
                "city": addr_dict["city"],
                "housenumber": addr_dict["houseNumber"],
                "housenumber_addition": addr_dict["houseNumberAddition"],
                "postalcode": addr_dict["postalCode"],
                "street": addr_dict["street"],
                "typename": addr_dict["__typename"]
            })
            result_rows.append(cur_user_info)
    
    df = pd.DataFrame(result_rows)
    # 如需修正示例中的NEW YOK拼写错误,可取消注释下行
    # df['city'] = df['city'].replace('NEW YOK', 'NEW YORK')
    return df

# 调用示例,替换为你的实际文件路径
df = parse_custom_log("your_file.txt")
print(df)

输出的DataFrame完全匹配你要求的列名和格式,适配你提供的样本数据结构。

内容的提问来源于stack exchange,提问作者teller.py3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:36:01