使用Python将CSV转换为JSON
我正在尝试使用python构建一个JSON文件,并从一个CSV文件开始 CSV文件如下所示:使用Python将CSV转换为JSON,python,json,csv,Python,Json,Csv,我正在尝试使用python构建一个JSON文件,并从一个CSV文件开始 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 [ { "a": "11725", "b": "11741", "tableau.c": "false", "tableau.h": "false",
a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h
11725,11741,false,N/A,true,23,N/A,false
[
{
"a": "11725",
"b": "11741",
"tableau.c": "false",
"tableau.h": "false",
"tableau2.d": "N/A",
"tableau2.e": "true",
"tableau2.f": "23",
"tableau2.g": "N/A"
}
]
到目前为止,我正在设法将csv文件转换为JSON文件,并将其排列为如下所示:
a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h
11725,11741,false,N/A,true,23,N/A,false
[
{
"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=(',', ': ')))
但是我希望得到一个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"
},
]
}
]
我一直在四处寻找如何做到这一点的答案,但到目前为止什么也没找到
有没有关于如何做的建议
提前感谢您此功能:
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)
您的csv文件是否与此完全相同,或者稍后文件中的每一行中是否会有更多的行/元素?只需澄清:
tableau
仅包含具有值的元素:“false”
和tableau2
所有其他元素?旁白:您的for reader中的行
循环是多余的。试试看:csv\u rows=list(reader)
Hi,谢谢你的帮助,但是Alex Hall回答了这个问题。从你的问题来看,这个答案是否可以推广还不清楚。Hi,非常感谢!我仍然需要确切地理解你做了什么,但这是完美的。