2016-09-15 4 views
0

私はdt1と同様のjsonレスポンスを持っていますが、CSNにjsonデータを書き込んでいます。フィールド名はNAME、Total、detailsです。Pythonはcsvの1行の列に複数行のデータを書き込みます

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

以下に示すように単一の列にのdict。名前と合計はすべての主題について繰り返されません。それは可能ですか?どのように達成するのですか?

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

ことは可能であるが、それはもはや 'csv'ファイルません。代わりに 'yaml'ファイルを作成してみてください。 – chapelo

+0

私は結果をいくつかのテーブル形式にしたい。 –

+0

セルのデータが引用符で囲まれている場合は、改行を有効な文字として使うことができます。 – haliphax

答えて

0

はこのような何かを試してみてください。

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になり:

Name,Total,Details 
ABC,6,"Subject3, {'value': '200', 'Opted': True}" 
,,"Subject2, {'value': '200', 'Opted': True}" 
,,"Subject1, {'value': '100', 'Opted': False}" 
関連する問題