2016-05-21 6 views
-3

私は、Pythonを使用してCSVファイルで始まるJSONファイルを作成しようとしています。CSVからPythonを使用したJSON

このようなCSVファイルの外観:

a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h 
11725,11741,false,N/A,true,23,N/A,false 

これまでのところ、私はこのように見えるようにJSONファイルにcsvファイルを変換し、それを配置する管理しています:

[ 
    { 
    "a": "11725", 
    "b": "11741", 
    "tableau.c": "false", 
    "tableau.h": "false", 
    "tableau2.d": "N/A", 
    "tableau2.e": "true", 
    "tableau2.f": "23", 
    "tableau2.g": "N/A" 
    } 
] 

これを使用しますコード:

import csv 
import json 

file = "myFile.csv" 
json_file = "myFile.json" 
csv_rows = [] 

with open(file) as csvfile: 
    reader = csv.DictReader(csvfile) 
    title = reader.fieldnames 

    for row in reader: 
     csv_rows.extend([{title[i]:row[title[i]] for i in  range(len(title))}]) 


with open(json_file, "w") as f: 
    f.write(json.dumps(csv_rows, sort_keys=True, indent=4, separators=(',', ': '))) 

しかし、私の願いはこの1つのように見えるJSONファイルを取得するでしょう:

[ 
    { 
     "a": "11725", 
     "b": "11741", 
     "tableau": [ 
     { 
      "value" :"false", 
      "name" : "c" 
     }, 
     { 
      "value" :"false", 
      "name" : "h" 
     }, 
    ] 
     "tableau2": [ 
     { 
      "value" :"N/A", 
      "name" : "d" 
     }, 
     { 
      "value" :"true", 
      "name" : "e" 
     }, 
     { 
      "value" :"23", 
      "name" : "f" 
     }, 
     { 
      "value" :"N/A", 
      "name" : "g" 
     }, 
    ] 

    } 
] 

私はこれを行う方法についての答えを探していて、これまで何も見つけていませんでした。

どうすればよいですか?

はこの作品事前

+0

は、CSVファイルには、まさにこのように見えるんやファイルの各行で複数の行/要素が後にあるでしょうか? 'tableau'は' value 'の要素だけで構成されています: '' false''と 'tableau2'はすべて他の要素ですか? –

+0

* Aside *:あなたの 'for row in reader'ループは冗長です。試してみてください: 'csv_rows = list(reader)' –

+0

こんにちは、あなたの助けに感謝しますが、Alex Hallが質問に答えました。 –

答えて

1

にありがとう:

for row in reader: 
    row_result = {} 
    for key, value in row.iteritems(): 
     if '.' in key: 
      tableau, name = key.split('.') 
      row_result.setdefault(tableau, []).append({'value': value, 'name': name}) 
     else: 
      row_result[key] = value 
    csv_rows.append(row_result) 
+0

こんにちは、ありがとう!私はあなたがしたことを正確に理解する必要がありますが、それは完璧です。 –

関連する問題