简体   繁体   English

Python在csv中的单行列中写入多行数据

[英]Python write multiline data in a column of a single row in csv

I have a json response similar to as dt1 and i'm writing the json data into CSV with fieldnames NAME, Total and details , below is my code. 我有一个类似于dt1的json响应,我正在将json数据写入具有字段名NAME,Total和details的CSV中,下面是我的代码。

dt1 = { u'Name': ABC,
        u'total': 6 ,
        u'Details':{
            u'Subject1': {u'Opted': False, u'value': u'100'},
            u'Subject2': {u'Opted': True, u'value': u'200'},
            u'Subject2': {u'Opted': True, u'value': u'200'}
        }
    }

with open('file.csv', 'w') as csvfile:
    fieldnames =  ['Name', 'Total', 'Details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    dt2 = dt1.values()[0].keys(
    for key in dt1.keys():
        if dt1[key]['detected'] is True)
            writer.writerow({'NAME': dt1['Name'], 'Total' : dt1['Total'], 'Details': ([key, [dt1[key][scan] for scan in dt2]])})

and the CSV generates is : CSV生成为:

NAME      Total    Detail

ABC       6     Subject1, "[u'Opted': False, u'value': u'100']"
ABC       6     Subject2, "[u'Opted': True, u'value': u'200']"
ABC       6     Subject3, {u'Opted': True, u'value': u'500'}

I want to write multi line data of details dict into single column as shown below. 我想将详细信息字典的多行数据写到单列中,如下所示。 Name and Total not repeating for every subject. 名称和总计不会对每个主题重复。 Is it possible to do? 有可能吗? how do I achieve it. 我如何实现它。

NAME    Total    Details  
ABC       6     Subject1, "[u'Opted': False, u'value': u'100']"
                Subject2, "[u'Opted': True, u'value': u'200']"
                Subject3, {u'Opted': True, u'value': u'500'}

try something like this: 尝试这样的事情:

import csv

dt1 = {
    u'Name': 'ABC',
    u'Total': 6 ,
    u'Details':{
        u'Subject1': {u'Opted': False, u'value': u'100'},
        u'Subject2': {u'Opted': True, u'value': u'200'},
        u'Subject3': {u'Opted': True, u'value': u'200'}
        }
    }

with open('file.csv', 'w') as csvfile:
    fieldnames =  ['Name', 'Total', 'Details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    first_detail = True
    for k in dt1['Details']:
        if first_detail:
            writer.writerow({'Name': dt1['Name'], 'Total' : dt1['Total'],
                             'Details': k + ',' + str(dt1['Details'][k])})
            first_detail = False
        else:
            writer.writerow({'Name': None, 'Total' : None,
                             'Details': k + ', ' + str(dt1['Details'][k])})

file.csv: file.csv:

Name,Total,Details
ABC,6,"Subject3, {'value': '200', 'Opted': True}"
,,"Subject2, {'value': '200', 'Opted': True}"
,,"Subject1, {'value': '100', 'Opted': False}"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM