Python 将 csv 文件转换为 Json 问题



我不熟悉python程序,有人可以帮忙吗?非常感谢!

def ConvertInputFileJsonStr(InputCsvPath):
#### Detail Data ####
fo = open(InputCsvPath, "r")
ColumnValuesCSVColumns = (
'externalDataRef', 'language','mailingListLibraryId','surveyID')
reader = csv.DictReader(fo, ColumnValuesCSVColumns)
ls = []
for row in reader:
ls.append(row)
groups = []
uniquekeys = []
for k, g in groupby(ls, lambda r: (r['externalDataRef'],r['language'], r['surveyID'])):
groups.append({
"externalDataRef": k[0],
"language": k[1],
"surveyID": k[2],
"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)]
})
uniquekeys.append(k)
return groups
fo.close()

它会回来

[
{
"externalDataRef": "535985",
"language": "EN",
"qualtricsDetails": [{
"mailingListLibraryId": "9011111111111"
}],
"surveyID": "123456789"
}
]

但我希望它转换为下面的示例。 我该怎么做?

[
{
"externalDataRef": "535985",
"language": "EN",
"qualtricsDetails": {
"mailingListLibraryId": "9011111111111"
},
"surveyID": "123456789"
}
]

您需要获取列表的第一项。 你可以这样做,但它会给出空结果list index out of range错误。

"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)][0]

看起来您只有以下 4 列:

'externalDataRef', 'language', 'mailingListLibraryId', 'surveyID'

因此,您可以通过更改以下行,使用更简单的语法轻松实现目标:

"qualtricsDetails": [{k: v for k, v in d.items() if k not in ['externalDataRef','language','surveyID']} for d in list(g)]
})

对此:

"qualtricsDetails": {"mailingListLibraryId": k[3]}

请让我知道这是否有帮助。

最新更新