将复杂的 json 转换为 csv 的 Python 程序,适合初学者

标签 python json csv dictionary

我了解 python 编程的基础知识,这是我的问题。我有以下来自英雄联盟(视频游戏)开发者 API 的 json 文件(摘录):

 "keys": {
          "35": "Shaco",
          "36": "DrMundo",
          "33": "Rammus",
          AND SO ON..
       },
       "data": {
           "Aatrox": {
               "tags": [
                   "Fighter",
                   "Tank"
               ],
                "stats": {
                    "attackrange": 150,
                    "mpperlevel": 45,
                    "mp": 105.6,
                    "attackdamage": 60.376,
                    AND SO ON...

             },
             AND SO ON.

我的代码:

#import dependencies
#to understand json
import json

#to write csv file
import csv

#to output json in a readable way in the command line
from pprint import pprint

#create the output file
outfile_path='output.csv'

#open up the file and tell the programm to write in it
writer = csv.writer(open(outfile_path, 'w'))


#Create custom headers for the data
headers =['armor', 'armorperlevel', 'attackdamage','attackdamageperlevel','attackrange', 'attackspeedoffset', 'attackspeedperlevel', 'crit', 'critperlevel', 'hp', 'hpperlevel', 'hpregen', 'hpregenperlevel', 'movespeed', 'mp', 'mpperlevel', 'mpregen', 'mpregenperlevel', 'spellblock', 'spellblockperlevel']
writer.writerow(headers)

#open data file, in order to manipulate it
with open('data.json') as data_file:
    data = json.load(data_file)

#print stats for the keys Aatrox
aatrox = data['data']['Aatrox']['stats']
pprint(aatrox)

到目前为止我所做的事情:

  • 我能够在我的程序中加载该文件
  • 我在 csv 文件中创建了自定义 header
  • 我能够打印特定“键”的数据(例如:Aatrox)
  • 我还可以打印特定“键”的“统计信息”

我现在想做的事情:

  • 在 CSV 文件中为每个“键”创建一行,“stats”值以逗号分隔

我相信我能够自己创建一个遍历所有键的循环。然而,我无法找到关于如何以我想要的格式将字典写入 CSV 文件的易于理解的信息。 谁能帮我解决这个问题。我最想了解的是:

  • 如何将字典值写入具有特定格式的字符串?
  • 如何告诉 python 将字典值放在正确的位置 标题,我已指定?

最佳答案

您可以使用csv.DictWriter :

import csv

stats =  {
    "attackrange": 150,
    "mpperlevel": 45,
    "mp": 105.6,
    "attackdamage": 60.376,}

headers =['attackdamage','attackrange', 'mp', 'mpperlevel']

with open('output.csv', 'wb') as f:
    writer = csv.DictWriter(
        f, headers, delimiter=',', lineterminator='\n', )
    writer.writeheader()
    writer.writerow(stats)

生成output.csv:

attackdamage,attackrange,mp,mpperlevel
60.376,150,105.6,45

关于将复杂的 json 转换为 csv 的 Python 程序,适合初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296609/

相关文章:

python - Psycopg2: 'module' 对象没有属性 'connect'

PHP 和 Mysql 查询 JSON 输出

json - 如何将结构化数据发送到检索对象的 REST 端点?应该使用哪个 HTTP 动词?

python - 如何在 Python 2 和 3 中写入八进制值

python - 如何使用 %%timeit 单元格魔法并排除设置代码?

json - 使用 Alamofire 的 JSON 写入 (_SwiftValue) 中的类型无效

r - 将多个文件导入到 R 中的单个合并数据框中

java - BigDecimal 值反序列化的问题

python - 如何打开并迭代 CSV 文件列表 - Python

python - optparse 的模糊选项错误