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

Python中JSON格式文本文件转DataFrame时读取结果为空的问题咨询

问题原因及解决方案

核心问题原因

  • JSON格式不兼容:你提供的JSON字符串使用单引号包裹键和字符串值,不符合标准JSON规范(标准JSON要求必须使用双引号)。Python内置的json.loads严格遵循JSON规范,碰到单引号会直接抛出解析异常,而你使用了无参数的except捕获所有异常后直接跳过该行,所有行都解析失败就会导致tweets_data为空列表。
  • 其他可能触发该问题的原因:
    • 文件路径错误:指定的data.txt不存在,或者相对路径和代码实际运行的工作目录不匹配,读取不到文件内容
    • 文件存在空行/换行异常:部分行不是完整的字典结构,解析失败
    • 编码不匹配:文件存储编码和Python默认读取文件的编码不一致,读取内容乱码无法解析

解决方案

1. 优先解决单引号解析问题

推荐使用更兼容的解析方式,避免替换字符串带来的潜在问题:
导入Python标准库的ast模块,使用ast.literal_eval替代json.loads,该方法支持解析Python风格的单引号字典字符串,安全性和兼容性更高。
如果确认字符串内容本身没有单引号,也可以将每行内容的单引号替换为双引号后再用json.loads解析。

2. 补充异常排查与边界处理

  • 读取文件前先校验文件路径是否存在
  • 读取文件时显式指定编码,避免乱码问题
  • 捕获异常时打印错误信息,方便定位具体问题
  • 跳过空行,避免无意义的解析尝试

修复后完整代码

import ast
import pandas as pd
import os

tweets_data_path = "data.txt"
# 校验文件是否存在
if not os.path.exists(tweets_data_path):
    print(f"错误:文件 {tweets_data_path} 不存在,请检查路径")
else:
    tweets_data = []
    # 显式指定utf-8编码读取文件
    with open(tweets_data_path, "r", encoding="utf-8") as tweets_file:
        for line_num, line in enumerate(tweets_file, 1):
            line = line.strip()
            # 跳过空行
            if not line:
                continue
            try:
                # 兼容单引号的字典解析
                tweet = ast.literal_eval(line)
                tweets_data.append(tweet)
            except Exception as e:
                # 打印错误信息方便排查
                print(f"第{line_num}行解析失败:{str(e)},行内容片段:{line[:100]}")
                continue

    print(f"共成功解析{len(tweets_data)}条有效数据")
    if tweets_data:
        # 直接用json_normalize生成DataFrame,不需要额外调用from_dict
        df = pd.json_normalize(tweets_data)
        print(df.head())
    else:
        print("无有效数据,无法生成DataFrame")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:00:03