【发布时间】:2016-02-16 22:40:55
【问题描述】:
我正在尝试为我的理学硕士建立一个数据库,其中包含几个赛季 NBA 比赛的逐场比赛数据。在经济学论文中。目前我正在从 NBA 的 API (see example) 中提取游戏,并使用 this routine 将每个游戏拆分为不同的 .json 文件(适用于 p-b-p 目的),从而生成 .json 文件(第一个播放示例):
{"headers": ["GAME_ID", "EVENTNUM", "EVENTMSGTYPE", "EVENTMSGACTIONTYPE", "PERIOD", "WCTIMESTRING", "PCTIMESTRING", "HOMEDESCRIPTION", "NEUTRALDESCRIPTION", "VISITORDESCRIPTION", "SCORE", "SCOREMARGIN"], "rowSet": [["0041400406", 0, 12, 0, 1, "9:11 PM", "12:00", null, null, null, null, null], ["0041400406", 1, 10, 0, 1, "9:11 PM", "12:00", "Jump Ball Mozgov vs. Green: Tip to Barnes", null, null, null, null]
我计划创建一个循环以将所有生成的 .json 文件转换为 .csv,这样我就可以继续在 stata 中进行计量经济分析。目前,我被困在这个过程的第一步:创建 json 到 CSV 的转换过程(我会在之后设计循环)。我正在尝试的代码是:
f = open('pbp_0041400406.json')
data = json.load(f)
f.close()
with open("pbp_0041400406.csv", "w") as file:
csv_file = csv.writer(file)
for rowSet in data:
csv_file.writerow(rowSet)
f.close()
但是,生成的 CSV 文件显示出尴尬的结果:一行读取 h,e,a,d,e,r,s,另一行读取 r,o,w,S,e,t,因此无法捕获标题或 rowSet(戏剧本身)。
考虑到on this thread 的贡献,我已经尝试解决这个问题,但我一直没能做到。谁能给我一些解决这个问题的见解?
[编辑] 用原始代码中的数据替换行集也产生了相同的结果。
提前致谢!
【问题讨论】:
-
嘿@SNygard,感谢您的提示。我打印了 rowSet 并产生了未定义的名称。打印数据后,原始 .json 文件确实显示在 shell 上。但是,在原始代码中替换行集的数据后,返回的 .csv 产生与之前相同的结果。
-
给定示例 JSON,
data将是一个带有两个键的 dict,headers和rowSet。因此,遍历行需要for row in data['rowSet']。