import csv import json json_file = open('file.json', 'w+', encoding='utf-8') csv_file = open('1501.csv', 'r', encoding='utf-8') # 讀取文件第一行不讀取換行符作為json文件里每個數據的鍵值 keys = csv_file.readline().strip('\n').split(',') json_file.write('[\n') flag = 0
while csv_file.readline(): # 字符串列表轉化為數字列表 values = csv_file.readline().strip('\n').split(',') values_temp = map(eval, values[0:2]) values_else = list(values_temp) values_else.append(values[2])
# 用zip()函數將兩個列表形成映射關系,創建字典 dic_temp = dict(zip(keys, values_else))
# 將字典轉化為字符串且帶有縮進 # flag用於判斷json文件中 "," 和換行的添加位置 json_str = json.dumps(dic_temp, indent=4)
if flag == 1: json_file.write(',\n') json_file.write(json_str) flag = 1 json_file.write(']') csv_file.close() json_file.close()
代碼解釋:
1、while csv_file.readline:
循環讀取csv文件的每一行,csv_flie為我的csv文件名字
2、字符串列表轉換為數字列表
我的csv文件中一行數據有三個元素,項目要求數據格式為前兩個元素為數字類型,第三個為字符串類型
3、用open()與readline()實現以行為單位讀取文件時,讀取出來的數據皆是字符串類型
json使用write()寫文件時,必須先用dumps()將數據轉換成字符串再存入。
4、關於flag
若是直接在存入每一行之后,write(',\n')寫入逗號和換行符則會發現,json的最后一行數據多出來一個逗號,刪除很麻煩
所以,我直接用flag來進行判斷。當寫入第一行數據之后,在第二行數據寫入之前,先寫入逗號和換行符,則第二行數據會順利寫入
5、最重要的一點,我的兩個文件都是放在同一個項目的同一個文件夾中,希望大家參考代碼時,修改為自己的文件路徑。其余內容請閱讀代碼中的注釋。
json文件樣式(部分):