2 votes

Comment ajouter des valeurs de date et heure dans un csv à partir de json en utilisant python ?

J'essaie de convertir un json imbriqué avec plusieurs tableaux et objets jsons en fichier CSV en utilisant python. J'ai essayé plusieurs méthodes, mais j'ai obtenu un fichier CSV avec seulement un tableau. Je veux imprimer les nombreux filtres qui ont des valeurs uniques à l'intérieur, donc je ne suis pas en mesure d'imprimer le 2ème tableau avec le coût, mon exemple de json comme ci-dessous :

SAMPLE 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"
       },  
      ]

maintenant, j'ai un tableau de temps où le temps et le coût sont en json, je veux que cela s'imprime en csv en utilisant le code python, mais quand j'essaie d'imprimer, je reçois le format ###### à la place des valeurs de temps. et une autre chose est que je reçois des valeurs de temps répétées imprimées même après la fin du temps du tableau.

Mon code 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']])

La sortie est :

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

tags,5517.734,Name,462.62,,70.358,2017-05-16,112.793

tags,5517.734,Name,462.62,,70.358,2017-05-17,112.748

tags,5517.734,Name,462.62,,70.358,2017-05-18,112.739

Il imprime les valeurs encore et encore, j'ai essayé d'utiliser l'itération mais je n'ai pas réussi à arrêter la répétition des valeurs. Donc, si quelqu'un peut m'aider ou me guider, je suis coincé.

LE RÉSULTAT ATTENDU EST DE :

filtre,coût,valeur,coût,sous-valeur,coût,temps,coût

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-16,112.793 tags,5517.734,Name,462.62,,70.358,2017-05-16,112.793 tags,5517.734,Name,462.62,BizOps01,60.188,2017-06-10,102.53

0voto

K. Kirsz Points 1002
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'],"",""])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X