[英]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.