如何将标题值仅打印一次在列中,并在从JSON转换为CSV时保留空白直到下一个标题

2024-10-05 22:49:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python代码,用于将json转换成csv文件。 当我转换时,我可以看到特定的标题被打印在我不需要的连续列中

我的python代码:

import json, csv, datetime

f = open('cost_drilldown_data.json')
data = json.load(f)
s = csv.writer(open('cd23old.csv', 'w'))
s.writerow(["filter", "cost", "value", "cost", "subvalue", "cost", "time", "cost"])

for breakdown in data['breakdown']:
    for time in data['time']:
        for values in breakdown['values']:
            if 'subvalues' in values:
                for subvalues in values['subvalues']:
                    s.writerow([breakdown['filter'],
                                breakdown["cost"],
                                values['value'],
                                values['cost'],
                                subvalues["subvalue"],
                                subvalues["cost"],
                                time["time"][0]["time"],
                                time["cost"]]
                               )
            else:
                s.writerow([breakdown['filter'], "", "", values['value'], values['cost']])

My actual output in csv:

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
account,628455167342,1613.508,,
account,85f05078-74e0-4015-aad3-84ff7e111023,1341.397,,
project_id,813,2954.905,,
provider,aws,1613.508,,
provider,azure,1341.397,,

BUT I EXPECT TO BE IS LIKE THIS:

filter,cost,value,cost,subvalue,cost,time,cost
tags,     5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-16,112.793
          5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-17,112.748
          5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-18,112.739
account,  628455167342,1613.508,
          628455167342,1613.508,
provider ,aws,1613.508,,
          aws,1613.508,

我只想在左边的过滤器标题必须只打印一次。 我怎样才能做到这一点任何帮助感谢


Tags: csvnameinjsondatatimevaluetags