Python:将一个 csv 文件转为 json 文件存储到磁盘
问题描述
利用记事本创建一个a.csv文件,内容如下:
姓名,语文,数学,英语,总分
张三,80,80,80,240
李四,90,90,90,270
王五,70,70,70,210
赵六,70,80,90,240
编程完成以下功能:
-
1.读取
a.csv
文件的数据内容 - 2.最后增加一列,名称为‘排名’
- 3.根据总分得到正确的排名并打印输出
-
4.将包含排名列的所有数据保存为
a.json
文件 - 5.提交代码和运行截图。
代码实现
"""
@author: shoo Wang
@contact: wangsuoo@foxmail.com
@file: demo04.py
@time: 2020/4/27 0027
import json
# f1 负责读入文件, f2 负责写入文件 + 代表同时具备读写功能
f1 = open('./a.csv', 'r+', encoding='utf-8')
f2 = open('./a.json', 'w+', encoding='utf-8')
# 使用列表推导式, 获取二维结构
table = [i.strip('\n').split(',') for i in f1.readlines()]
# 表头增加排名,然后我们就不需要表头了,因为它没法排序
table[0].append('排名')
# 由于 sort 函数和 extend 函数都是没有返回值的
# 所以我们必须事先存储待处理变量,如果题目中没给总分可以 sum([int(j) for j in x[1:]])
sortList = table[1:]
sortList.sort(key=lambda x: x[-1], reverse=True)
# 增加排名数字
for i in range(len(sortList)):
sortList[i].append(str(i + 1))
# 表头加上已经排好序的表体
listHead = table[:1]
listHead.extend(sortList)
# 得到 Python 数据类型的 listHead
# 现在转化成 json 数据类型
# 1.首先建立映射关系,zip() 函数返回的是 zip 类型
# 我们要把 zip 类型转化成 字典类型;
toJson = []
for i in listHead[1:]:
toJson.append(dict(zip(listHead[0], i)))