【问题标题】:How to add date time values in csv from json using python?如何使用python从json中添加csv中的日期时间值?
【发布时间】:2017-12-10 03:17:25
【问题描述】:

我正在尝试使用 python 将具有多个数组和对象 json 的嵌套 json 转换为 CSV 文件。我尝试了很多方法,我得到了只有 1 个数组的 csvfile。我想打印许多内部具有唯一值的过滤器,所以我无法打印带有成本的第二个数组,我的示例 json 如下:

示例 JSON:

     {
    "breakdown":[
     {
     "filter":"tags",
     "cost":5517.734,
     "values":[
        {
           "count":13,
           "subvalues":[
              {
                 "count":1,
                 "subvalue":"BizOps-VM-20",
                 "cost":227.576
                  {
                 "count":4,
                 "subvalue":"<nulltagvalue>",
                 "cost":70.358
              },
                 "subvalues":[
              {
                 "count":2,
                 "subvalue":"cb",
                 "cost":4.584
              }
           ],
           "cost":4.584,
           "value":"TagNewForTestw"
           }
           ]   
           },
             {
        "filter":"account",
        "cost":2954.905,
        "values":[
        {
           "count":86,
           "cost":1613.508,
           "value":"628455167342"
         },]
         },
       "time":[
        {
        "cost":112.793,
       "time":"2017-05-16"
       },
      {
      "cost":112.748,
     "time":"2017-05-17"
        },
        {
       "cost":112.739,
       "time":"2017-05-18"
       },  
      ]

现在在这里我有时间数组,其中时间和成本在 json 中,我希望使用 python 代码在 csv 中打印,但是在尝试打印时,我得到 ###### 格式代替时间值。还有一件事是,即使在数组时间结束后,我也会重复打印时间值。

我的python代码:

      import json
      import csv
      import time
      f = open('cost_drilldown_data.json')            
      data = json.load(f)
      s=csv.writer(open('cd13old.csv','w'))
      s.writerow(["filter","cost","value","cost","subvalue","cost"])
      i=0
      for breakdown in data['breakdown']:
           for values in breakdown['values']:
              if 'subvalues' in values:
                  for subvalues in values['subvalues']:
                      for time in data['time']:                     
                        s.writerow([breakdown['filter'],breakdown["cost"],
                       values['value'],values['cost'],subvalues["subvalue"],
                       subvalues["cost"],time['time'],time['cost']])
              else :       
      s.writerow([breakdown['filter'],"","",values['value'],values['cost']])

输出是:

filter,cost,value,cost,subvalue,cost,time,cost

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-16,112.793

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-17,112.748

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-18,112.739

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-19,107.165

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-20,89.988

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-21,88.773

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-22,96.591

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-23,104.809

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-24,104.471

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-25,104.472

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-26,103.536

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-27,83.205

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-28,83.103

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-29,83.111

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-30,84.555

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-31,86.986

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-01,103.024

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-02,100.905

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-03,102.062

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-04,105.243

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-05,105.134

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-06,111.764

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-07,107.455

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-08,107.62

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-09,107.61

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-10,102.53

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-11,102.282

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-12,105.52

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-13,93.617

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-14,41.094

标签,5517.734,姓名,462.62,,70.358,2017-05-16,112.793

标签,5517.734,姓名,462.62,,70.358,2017-05-17,112.748

标签,5517.734,姓名,462.62,,70.358,2017-05-18,112.739

它一次又一次地打印值,我尝试使用迭代但不是 abe 来停止值的重复。所以任何人都可以在这里帮助或指导我,我被困住了

预期结果是:

过滤器、成本、价值、成本、子价值、成本、时间、成本

标签,5517.734,名称,462.62,BizOps-VM-20,227.576,2017-05-16,112.793 标签,5517.734,姓名,462.62,,70.358,2017-05-16,112.793 标签,5517.734,姓名,462.62,BizOps01,60.188,2017-06-10,102.53

【问题讨论】:

  • 问题很可能出在输入数据上。但是由于您的示例包含太多问题(缺少逗号、不连贯的缩进、不完整的 json),我无法告诉您更多信息。如果您希望我们能够帮助您,请编写一个有效的 json 输入并修复其缩进。
  • @SergeBallesta,完成缩进,请原谅 json,因为它是巨大的数据,我无法在此处粘贴,请指导我如何使用 if 循环来满足空关键字
  • 这就像我想打印过滤器:帐户和以下许多过滤器是否使用 ifloop 或者我可以使用 for 循环是否很好,因为我被困在这个问题中需要任何建议或帮助!!
  • 请修正您的输入字符串,使其成为有效的 json。现在无法解析它。除非您提供有效的输入,否则我怀疑有人会帮助您。

标签: python arrays json csv


【解决方案1】:
with open('cd13old.csv','w') as csvfile:
    s=csv.writer(csvfile)
    s.writerow(["filter","cost","value","cost","subvalue","cost"])
    for breakdown in data['breakdown']:
        for values in breakdown['values']:
            if 'subvalues' in values:
                for subvalues in values['subvalues']:
                    s.writerow([breakdown['filter'],values['value'],values['cost'],subvalues["subvalue"],subvalues["cost"]])
            else:
                s.writerow([breakdown['filter'],values['value'],values['cost'],"",""])

【讨论】:

  • 是的,我只是在寻求有关如何修改的帮助如果我把这个放在下面的值中的子值['subvalues']:如果'子值'不在子值中:继续 s.writerow([breakdown['filter'],breakdown["cost"],values['value '],values['cost'],subvalues["subvalue"],subvalues["cost"]])
  • 你能帮忙吗
  • 对于数据中的细分['breakdown']: 对于细分中的值['values']: 对于值中的子值['subvalues']: # if subvalues not in values: if 'subvalues' not在“价值”中:打破 s.writerow([breakdown['filter'],breakdown["cost"],values['value'],values['cost'],subvalues["subvalue"],subvalues["cost "]]) 我已经试过了,但也没有来
  • 对于数据中的细分['breakdown']:对于细分中的值['values']:对于值中的子值['subvalues']['values']:#如果子值不在值中: if 'subvalues' not in 'values': break ERROR: for subvalues in values['subvalues']['values']: # if subvalues not in values: TypeError: list indices must be integers, not str
  • kirsz 非常感谢,它帮助我解决了错误,你太棒了!!!感谢您的帮助,我会从您的编码中了解如何编码,
猜你喜欢
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多