【问题标题】:Append key of JSON as csv column while writing to CSV在写入 CSV 时将 JSON 的键附加为 csv 列
【发布时间】:2014-07-30 14:28:54
【问题描述】:

我是 Python 新手, 我需要将以下 JSON 格式转换为 csv。

{
"2efbc1d": ["ad5460", 32.8963, -84.3213, 74, 39000, 596, 10048, 8444, "B737", "N958WN", 1395360005, "", "", "", 0, 0, "", 0], 

"2efbaa6": ["a1d0a3", 40.3773, -74.2731, 44, 7100, 249, 8450, 8444, "E170", "N216JQ", 1395360005, "", "", "", 0, 0, "592660", 0],

"2ef8db0": ["a8aa73", 40.8801, -73.4095, 46, 27075, 487, 22372, 8444, "B752", "N658AA", 1395360005, "MIA", "BOS", "AA2412", 0, 0, "AAL2412", 0]
 }

它是一个键:[Array] 格式。

我修改的代码从堆栈溢出中获取和修改,将数组写入 csv,但我需要将键添加为第一列。

我的代码放在这里

import json
import csv

with open("data.json") as file:
data = json.load(file)

with open("data.csv", "w") as file:
csv_file = csv.writer(file)
print( data.keys())
newlist = list()
for i in data.keys():
   newlist.append(i)
print(newlist[1])

cnt = 0 #len(newlist)-
for item in data:
    csv_file.writerow(  data[newlist[cnt]])
    cnt = cnt+1 

任何帮助表示赞赏。

【问题讨论】:

    标签: python json converter


    【解决方案1】:

    您需要创建一个列表[key, val0, val1, val2, ...]。可能最直接的方法是:

    for key, value in data.items():
        l = [key]
        l.extend(values)
        csv_file.writerow(l)
    

    【讨论】:

      【解决方案2】:

      您可以将您的 JSON 转换为列表列表,然后使用 csv 模块的 writerow,就像您已经在做的那样。这就是我的意思:

      data = {'2efbc1d': ['ad5460', 32.8963, -84.3213, 74, 39000, 596, 10048, 8444, 'B737', 'N958WN', 1395360005, '', '', '', 0, 0, '', 0], '2ef8db0': ['a8aa73', 40.8801, -73.4095, 46, 27075, 487, 22372, 8444, 'B752', 'N658AA', 1395360005, 'MIA', 'BOS', 'AA2412', 0, 0, 'AAL2412', 0], '2efbaa6': ['a1d0a3', 40.3773, -74.2731, 44, 7100, 249, 8450, 8444, 'E170', 'N216JQ', 1395360005, '', '', '', 0, 0, '592660', 0]}
      
      rows = []
      for k, v in data.items():
          new_list = [k]
          new_list.extend(v)
          rows.append(new_list)
      
      print rows
      

      这给了你:

      ['2efbc1d', 'ad5460', 32.8963, -84.3213, 74, 39000, 596, 10048, 8444, 'B737', 'N958WN', 1395360005, '', '', '', 0, 0, '', 0]
      ['2efbaa6', 'a1d0a3', 40.3773, -74.2731, 44, 7100, 249, 8450, 8444, 'E170', 'N216JQ', 1395360005, '', '', '', 0, 0, '592660', 0]
      ['2ef8db0', 'a8aa73', 40.8801, -73.4095, 46, 27075, 487, 22372, 8444, 'B752', 'N658AA', 1395360005, 'MIA', 'BOS', 'AA2412', 0, 0, 'AAL2412', 0]
      

      现在对rows 的每个元素(子列表)执行writerow。或者正如 jonrshrape 的回答所建议的那样,在创建 new_list 时编写它,并取消 rows 列表列表。

      【讨论】:

        猜你喜欢
        • 2021-07-29
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 2016-07-17
        • 2021-01-01
        • 1970-01-01
        相关资源
        最近更新 更多