python json格式和csv文件轉換
上代碼
1 import csv 2 import json 3 4 ''' 5 json格式示例 6 [{ "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" }] 7 ''' 8 #file:json to csv 9 def transcsv(jsonpath, csvpath): 10 json_file = open(jsonpath, 'r', encoding='utf8') 11 csv_file = open(csvpath, 'w', newline='') 12 #讀文件 13 ls = json.load(json_file) #將json格式的字符串轉換成python的數據類型,解碼過程 14 data = [list(ls[0].keys())] # 獲取列名,即key 15 for item in ls: 16 data.append(list(item.values())) # 獲取每一行的值value 17 #寫入文件 18 for line in data: 19 csv_file.write(",".join(line) + "\n") # 以逗號分隔一行的每個元素,最后換行 fw.close() #關閉csv文件 20 #關閉文件 21 json_file.close() 22 csv_file.close() 23 #file:csv to json 24 def transjson(jsonpath, csvpath): 25 fw = open(jsonpath, 'w', encoding='utf8') # 打開csv文件 26 fo = open(csvpath, 'r', newline='') # 打開csv文件 27 28 ls = [] 29 for line in fo: 30 line = line.replace("\n", "") # 將換行換成空 31 ls.append(line.split(",")) # 以,為分隔符 32 #print(ls) 33 #寫入 34 for i in range(1, len(ls)): # 遍歷文件的每一行內容,除了列名 35 ls[i] = dict(zip(ls[0], ls[i])) # ls[0]為列名,所以為key,ls[i]為value, 36 # zip()是一個內置函數,將兩個長度相同的列表組合成一個關系對 37 38 json.dump(ls[1:], fw, sort_keys=True, indent=4) 39 #將Python數據類型轉換成json格式,編碼過程 40 #默認是順序存放,sort_keys是對字典元素按照key進行排序 41 #indet參數用語增加數據縮進,使文件更具有可讀性 42 43 # 關閉文件 44 fo.close() 45 fw.close() 46 47 if __name__ == '__main__': 48 #transcsv('./testcase/my.json', './testcase/my.csv') 49 transjson('./testcase/write.json', './testcase/my.csv')
my.json文件內容:
[{ "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" }]