如何读取字典行并写入CSV文件

时间:2015-10-10 02:30:57

标签: python

我有一个数据文件,格式是这样的

{"Name":"David","Age":"14","Score":[0,1]}
{"Name":"Jason","Age":"12","Score":[0,0]}

我的问题是: 1)我如何阅读此文件并转换为CSV

Name,Age,Score
David,14,0/1
Jason,12,0

2)如何将[0,1]转换为0/1,[0,0]为0,表示当分母为零时,结果为0,否则,取第1个数除以[]

中的第二个数字

谢谢!

2 个答案:

答案 0 :(得分:4)

首先,数据似乎是JSON编码的,因此您可以使用json模块将其读入字典列表:

import json

with open('input') as f:
    dicts = [json.loads(line) for line in f]

对于您的示例数据,dicts将设置为:

>>> from pprint import pprint
>>> pprint(dicts)
[{u'Age': u'14', u'Name': u'David', u'Score': [0, 1]},
 {u'Age': u'12', u'Name': u'Jason', u'Score': [0, 0]}]

更新分数(假设您确实想要进行分割):

for d in dicts:
    score = d['Score']
    d['Score'] = score[0]/score[1] if score[1] != 0 else 0
    #d['Score'] = '{}/{}'.format(score[0], score[1]) if score[1] != 0 else '0'

(以上行将生成除法操作的文本版本,如果这是想要的那样)

接下来,您可以使用csv.DictWriter对象将输出写入CSV文件。

import csv

with open('output', 'w') as f:
    writer = csv.DictWriter(f, fieldnames=['Age', 'Name', 'Score'])
    writer.writeheader()
    writer.writerows(dicts)

最后,您的输出文件应包含:

Age,Name,Score
14,David,0
12,Jason,0

答案 1 :(得分:0)

您应该首先学习如何打开文件并阅读行

Reading and Writing Files

之后学习如何使用特定格式提取字符串的子串

Regular Expression Syntax

然后学习如何在文件中写入

Reading and Writing Files

使用这些链接,我认为您可以尝试一些并返回此处并使用您的代码创建一个问题。没有你自己的代码,你要我们为你编程。