【发布时间】:2018-08-01 19:22:59
【问题描述】:
这是我的多列输入 CSV 文件,我想将此 csv 文件转换为包含部门、部门 ID 和一个名为 customer 的嵌套字段的 json 文件,并将第一个和最后一个嵌套到该字段。
department, departmentID, first, last
fans, 1, Caroline, Smith
fans, 1, Jenny, White
students, 2, Ben, CJ
students, 2, Joan, Carpenter
...
输出我需要的json文件:
[
{
"department" : "fans",
"departmentID: "1",
"customer" : [
{
"first" : "Caroline",
"last" : "Smith"
},
{
"first" : "Jenny",
"last" : "White"
}
]
},
{
"department" : "students",
"departmentID":2,
"user" :
[
{
"first" : "Ben",
"last" : "CJ"
},
{
"first" : "Joan",
"last" : "Carpenter"
}
]
}
]
我的代码:
from csv import DictReader
from itertools import groupby
with open('data.csv') as csvfile:
r = DictReader(csvfile, skipinitialspace=True)
data = [dict(d) for d in r]
groups = []
uniquekeys = []
for k, g in groupby(data, lambda r: (r['group'], r['groupID'])):
groups.append({
"group": k[0],
"groupID": k[1],
"user": [{k:v for k, v in d.items() if k != 'group'} for d in list(g)]
})
uniquekeys.append(k)
pprint(groups)
我的问题是:groupID 在数据中显示两次,进出嵌套 json。我想要的是 group 和 groupID 作为 grouby 键。
【问题讨论】:
-
尝试运行您的示例代码会得到
KeyError: 'group' -
抱歉,我遇到了 stackoverflow 提交错误,将组更改为部门,将 groupID 更改为部门ID。请在 CSV 文件中将部门更改为组,将部门 ID 更改为部门。对不起。
标签: python json csv nested multiple-columns