将json的结果写入csv

时间:2017-11-14 21:20:00

标签: python json python-3.x

我使用DictWriter因为我觉得它会更容易,但我没有在哪里。我试图将我的json文件写入csv文件,其中每个字段都在其自己的列中。

json文件:

public class ValidateError {

    private Field field;

    public ValidateError(Field field) {
        this.field = field;
    }

    public Field getField() {
        return field;
    }
}

class ValidateResultModel<T> {

    private T model;
    private List<ValidateError> validateErrors;

    ValidateResultModel(T model, List<ValidateError> validateErrors) {
        this.model = model;
        this.validateErrors = validateErrors;
    }

    T getModel() {
        return model;
    }

    List<ValidateError> getValidateErrors() {
        return validateErrors;
    }
}

public class ValidateException extends RuntimeException {

    private List<ValidateError> validateErrors;

    ValidateException(List<ValidateError> validateErrors) {
        this.validateErrors = validateErrors;
    }

    public List<ValidateError> getValidateErrors() {
        return validateErrors;
    }
}

这是我写的脚本:

[ {"district": "4", 
"id": "DEL000027", 
"full_name": "Gerald L. Brady", "party": "Democratic", 
"email": "Gerald.Brady@state.de.us"}, 
{"district": "37", 
"id": "DEL000028", "full_name": "Ruth Briggs  King", 
"party": "Republican", 
"email": "Ruth.BriggsKing@state.de.us"}]

2 个答案:

答案 0 :(得分:3)

您想要的是writerow(),因为您正在遍历行。

writerows()获取列表(行数)

import json, csv

mainFile = open("vote.json", "r")
data = json.load(mainFile)

with open('names.csv','w') as csvfile:
    values = ['full_name', 'party', 'district','email']
    writer = csv.DictWriter(csvfile, fieldnames=values, extrasaction='ignore')

    writer.writeheader()
    for item in data:
        writer.writerow(item)

或者,您可以使用writerows()

import json, csv

mainFile = open("vote.json", "r")
data = json.load(mainFile)

with open('names.csv','w') as csvfile:
    values = ['full_name', 'party', 'district','email']
    writer = csv.DictWriter(csvfile, fieldnames=values, extrasaction='ignore')
    writer.writeheader()
    writer.writerows(data)

答案 1 :(得分:2)

该函数名为writerows(带s)。因此该函数不需要单个字典,您需要传递可迭代的字典,因此您可以写:

import json, csv

with open('names.csv','w') as csvfile:
    values = ['full_name', 'party', 'district','email']
    writer = csv.DictWriter(csvfile, fieldnames=values, extrasaction='ignore')

    writer.writeheader()

    writer.writerows(data)

您需要在此处使用extrasaction='ignore',因为您的词典包含values列表中不存在的额外键。如果您没有提供解决此问题的方法,作者将会出错。

您还需要在with子句的正文中写入数据,因为在with的(结束)之后,文件将再次关闭。 / p>

此代码段产生:

full_name,party,district,email
Gerald L. Brady,Democratic,4,Gerald.Brady@state.de.us
Ruth Briggs  King,Republican,37,Ruth.BriggsKing@state.de.us