2 回答

TA贡献1796条经验 获得超7个赞
使用itertools.groupby:
import csv
import json
import itertools
import operator
with open('Test.csv') as f:
cf = csv.DictReader(f)
output = [{'data': list(rows)}
for id_, rows in itertools.groupby(cf, key=operator.itemgetter('Id'))]
data = json.dumps(output, indent=4)
print(data)

TA贡献1806条经验 获得超8个赞
虽然不像 using 那样简洁优雅itertools.groupby,但这是一种方法,它涉及手动跟踪具有相同 的数据组Id:
import csv
import json
with open('Test.csv') as f:
output = []
data = []
key = None
for row in csv.DictReader(f):
if row['Id'] == key:
data.append(row)
else:
if data:
output.append({"data": data})
data = []
data.append(row)
key = row['Id']
if data: # A final group?
output.append({"data": data})
print('output:\n', json.dumps(output, indent=4))
输出:
output:
[
{
"data": [
{
"Id": "123545",
"LineNo": "1",
"Amt": "1000.00",
"ReceivedDt": "2019-02-01T00:00:00",
"FromDt": "2019-02-01T00:00:00",
"ToDate": "2019-02-01T00:00:00",
"regionId": "WA12"
},
{
"Id": "123545",
"LineNo": "2",
"Amt": "200.00",
"ReceivedDt": "2019-02-01T00:00:00",
"FromDt": "2019-02-01T00:00:00",
"ToDate": "2019-02-01T00:00:00",
"regionId": "WA12"
},
{
"Id": "123545",
"LineNo": "3",
"Amt": "200.00",
"ReceivedDt": "2019-02-01T00:00:00",
"FromDt": "2019-02-01T00:00:00",
"ToDate": "2019-02-01T00:00:00",
"regionId": "WA12"
}
]
},
{
"data": [
{
"Id": "123546",
"LineNo": "1",
"Amt": "200.00",
"ReceivedDt": "2019-02-01T00:00:00",
"FromDt": "2019-02-01T00:00:00",
"ToDate": "2019-02-01T00:00:00",
"regionId": "WA13"
},
{
"Id": "123546",
"LineNo": "2",
"Amt": "200.00",
"ReceivedDt": "2019-02-01T00:00:00",
"FromDt": "2019-02-01T00:00:00",
"ToDate": "2019-02-01T00:00:00",
"regionId": "WA13"
}
]
}
]
添加回答
举报