【问题标题】:Python write multiline data in a column of a single row in csvPython在csv中单行的列中写入多行数据
【发布时间】:2016-09-15 11:22:01
【问题描述】:

我有一个类似于 dt1 的 json 响应,我正在将 json 数据写入 CSV,字段名称为 NAME、Total 和 details,下面是我的代码。

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]])})

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'}

我想将详细信息字典的多行数据写入单列,如下所示。名称和总数不针对每个主题重复。有可能吗?我如何实现它。

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'}

【问题讨论】:

  • 有可能,但它不再是csv 文件。也许尝试创建一个yaml 文件。
  • 我希望结果是某种表格格式。
  • 如果您的单元格数据用引号引起来,我很确定您可以将换行符作为有效字符。
  • @haliphax 不,我没有换行符。即使我能用它做什么?
  • 在一个数据单元格中使用多行来分割信息。这只是一个想法。

标签: python json csv dictionary


【解决方案1】:

试试这样的:

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])})

文件.csv:

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

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2016-07-29
    • 2012-12-17
    • 2013-10-16
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多