【发布时间】:2019-04-18 05:35:57
【问题描述】:
我需要使用下面指定的 python 脚本将 data.csv 文件转换为“ExpectedJsonFile.json”文件。但我无法做到这一点。 Python脚本“csvjs.py”指定如下。
import pandas as pd
from itertools import groupby
from collections import OrderedDict
import json
df = pd.read_csv('data8.csv', dtype={
"Source" : str,
"Template": str,
"ConfigurationSetName": str,
})
results = []
for (Source, Template, ConfigurationSetName), bag in df.groupby (["Source", "Template", "ConfigurationSetName"]):
contents_df = bag.drop(["Source", "Template", "ConfigurationSetName"], axis=1)
Destinations = [OrderedDict(row) for i,row in contents_df.iterrows()]
results.append(OrderedDict([("Source", Source),
("Template", Template),
("ConfigurationSetName", ConfigurationSetName),
("Destinations", Destinations)]))
print json.dumps(results[0], indent=4)
with open('ExpectedJsonFile.json', 'w') as outfile:
outfile.write(json.dumps(results[0], indent=4))
data.csv 中的数据如下所示。
Source,Template,ConfigurationSetName,ToAddresses,ReplacementTemplateData
demo@example.com,MyTemplate,noreply,customer1@gmail.com,customer1
demo@example.com,MyTemplate,noreply,customer2@gmail.com,customer2
当我运行“python csvjs.py”时,输出如下所示
{
"Source": "demo@example.com",
"Template": "MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations": [
{
"ToAddresses": "customer1@gmail.com",
"ReplacementTemplateData": "customer"
},
{
"ToAddresses": "customer2@gmail.com",
"ReplacementTemplateData": "customer2"
}
]
}
但我的预期输出如下
{
"Source":"demo@example.com",
"Template":"MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations":[
{
"Destination":{
"ToAddresses":[
"customer1@gmail.com"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer1\" }"
},
{
"Destination":{
"ToAddresses":[
"customer2@gmail.com"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer2\" }"
},
{
"Destination":{
"ToAddresses":[
"customer3@gmail.com"
]
},
"ReplacementTemplateData":"{}"
}
],
"DefaultTemplateData":"{ \"name\":\"friend\" }"
}
我的模板如下所示
{
"Template": {
"TemplateName": "MyTemplate",
"SubjectPart": "Greetings, {{Name}}!",
"HtmlPart": "<h1>Hello {{Name}},</h1><p>Your favorite animal is cat.</p>",
"TextPart": "Dear {{Name}},\r\nYour favorite animal is cat."
}
}
【问题讨论】:
-
您真的需要这个
"Destination":{密钥吗?看起来就像外部数组中的噪音 -
是的,我需要那个
-
好的,我建议重写
Destinations = [OrderedDict(row)行,这样您就可以在JSON 中实际创建中间Destination对象,因此ToAddresses可以成为列表而不是字符串跨度>