使用pandas read_json读取本地CoQA JSON数据集报错如何解决?
报错原因
出现ValueError: Expected object or value报错但直接读取URL正常,本质是本地读取的内容不是合法JSON结构,常见触发原因如下:
- 本地文件下载损坏/不完整:下载过程中网络中断、存储异常会导致JSON结构截断,pandas无法解析得到合法对象。
- 相对路径指向无效:代码运行的当前工作目录和你存放JSON文件的目录不一致,
./相对路径找不到目标文件,读取到空内容触发解析报错。 - 编码/压缩格式不匹配:部分下载渠道会自动对数据集做gzip压缩,或者存储时编码不是UTF-8,pandas默认参数无法正确解码文件内容。
验证方法
可以依次执行以下代码定位问题:
- 验证文件路径是否正确
import os # 打印当前代码运行的工作目录 print("当前工作目录:", os.getcwd()) # 检查目标文件是否存在 print("文件是否存在:", os.path.exists("./coqa-train-v1.0.json"))
- 验证JSON文件合法性
import json with open("./coqa-train-v1.0.json", "r", encoding="utf-8") as f: try: data = json.load(f) print("JSON文件合法,顶层键:", list(data.keys())) except Exception as e: print("JSON文件损坏:", e)
解决方案
- 路径错误:将JSON文件移动到打印出的当前工作目录下,或者替换相对路径为文件的绝对路径读取,示例:
# Windows示例,注意路径用斜杠或者双反斜杠 coqa = pd.read_json("C:/Users/xxx/Downloads/coqa-train-v1.0.json") # Linux/macOS示例 coqa = pd.read_json("/home/xxx/Downloads/coqa-train-v1.0.json")
- 文件损坏:重新下载数据集,校验文件大小,官方发布的coqa-train-v1.0.json大小约为55MB,大小偏差过大说明下载未完成。
- 格式不匹配:读取时手动指定编码和压缩参数:
coqa = pd.read_json("./coqa-train-v1.0.json", encoding="utf-8", compression="infer")
- 替代方案:如果始终无法解决本地JSON解析问题,可以首次读取官方URL后将数据存为pickle格式,后续直接读取本地pickle文件即可,不会出现解析异常:
# 首次运行拉取数据并存本地 import pandas as pd coqa = pd.read_json('http://downloads.cs.stanford.edu/nlp/data/coqa/coqa-train-v1.0.json') coqa.to_pickle("coqa_train.pkl") # 后续运行直接读本地文件 coqa = pd.read_pickle("coqa_train.pkl")
内容的提问来源于stack exchange,提问作者Max Be
相关产品推荐
相关产品推荐

