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: [email protected]
@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)))

# 2.寫入文件, dump 直接寫入文件, dumps 返回 json 數據
json.dump(toJson, f2, ensure_ascii=False, indent=4)

# 釋放資源
f1.close()
f2.close()

我也不是一次編寫完成的,是在不斷的試錯中一步一步的解決這個問題的,令我印象最深刻的就是這個sort函數的用法,需要傳入一個回調函數,這裏是以列表元素的最後一個值作爲key,我之前在做的時候忘記了題目中已經給了總分,還使用了sum([int(j) for j in x[1:]])這個排序,多此一舉。

代碼截圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章