[英]convert csv file to nested nested list of dictionaries using python
我正在嘗試將 csv 文件轉換為嵌套的 json:我正在尋找類似這樣的 json 輸出。
這是我的 json 數據:
[
{
"RID":"test",
"UId":"userl@gmail.com",
"Ugroup":"abc",
"Query":[
{
"Status":"query1",
"ECategory":"error1"
},
{
"Status":"query2",
"ECategory":"error2"
}
],
"SuccesfulQ":"7",
"FailedQ":"0"
},
{
"RID":"test2",
"Uld":"user2@gmail.com",
"Ugroup":"xyz",
"Query":[
{
"Statement":"query3",
"ECategory":"error3"
},
{
"Statement":"query4",
"ECategory":"error4"
}
],
"SuccesfulQ":"7",
"FailedQ":"0"
}
]
這是我的 CSV 文件
[csv文件][2]
RID,UId,Ugroup,Query.Statement,Query.ECategory,SuccesfulQ,FailedQ
test,user1@gmail.com,abc,query1,error1, 7, 0
test,user1@gmail.com,abc,query2,error2 7, 0
test2,user2@gmail.com,xyz,query3,error3 7, 0
test2,user2@gmail.com,xyz,query4,error4 7, 0
使用下面的代碼,我得到的是普通的 json 而不是嵌套的:
import csv
import json
def make_json(csvFilePath):
data = {}
with open(csvFilePath, encoding='utf-8') as csvf:
a = [{k:v for k,v in row.items()} for row in csv.DictReader(csvf, skipinitialspace=True)]
print(a)
csvFilePath = r'table.csv'
make_json(csvFilePath)
在這種情況下,在創建字典列表后,您可以迭代奇數行並附加偶數行中的數據。 之后,您可以使用json.dumps
將完整列表轉換為 json。
試試這個代碼。 它假設每個用戶查詢有 2 行:
cs = '''
RID,UId,Ugroup,Statement,ECategory,SuccesfulQ,FailedQ
test1,user1@gmail.com,abc,query1,error1,7,0
test1,user1@gmail.com,abc,query2,error2,7,0
test2,user2@gmail.com,xyz,query3,error3,7,0
test2,user2@gmail.com,xyz,query4,error4,7,0
'''.strip()
with open('table.csv','w') as f: f.write(cs) # write test file
############# Main Script ##############
import csv
import json
def make_json(csvFilePath):
data = {}
lst = []
with open(csvFilePath, encoding='utf-8') as csvf:
a = [{k:v for k,v in row.items()} for row in csv.DictReader(csvf, skipinitialspace=True)]
for i in range(0,len(a),2): # odd rows
a[i]['Query'] = [ # combined data, new column
{'Statement':a[i]['Statement'],'ECategory':a[i]['ECategory']},
{'Statement':a[i+1]['Statement'],'ECategory':a[i+1]['ECategory']}
]
del a[i]['Statement'] # remove old columns
del a[i]['ECategory']
lst.append(a[i]) # final list # odd rows only
return json.dumps(lst)
csvFilePath = r'table.csv'
jsnFilePath = r'table.json'
jsn = make_json(csvFilePath)
with open (jsnFilePath,'w') as f:
f.write(jsn)
輸出
[
{
"RID": "test1",
"UId": "user1@gmail.com",
"Ugroup": "abc",
"SuccesfulQ": "7",
"FailedQ": "0",
"Query": [
{
"Statement": "query1",
"ECategory": "error1"
},
{
"Statement": "query2",
"ECategory": "error2"
}
]
},
{
"RID": "test2",
"UId": "user2@gmail.com",
"Ugroup": "xyz",
"SuccesfulQ": "7",
"FailedQ": "0",
"Query": [
{
"Statement": "query3",
"ECategory": "error3"
},
{
"Statement": "query4",
"ECategory": "error4"
}
]
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.