我使用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"}]
答案 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