2017-09-20 125 views
2

大家好,我對python非常陌生,所以只需要忍耐一下。 我有一個這種格式的示例json文件。將地圖數組json轉換爲csv

[{ 
"5":"5", 
"0":"0", 
"1":"1"},{ 
"14":"14", 
"11":"11", 
"15":"15"},{ 
"25":"25", 
"23":"23", 
"22":"22"}] 

我想以特定的方式將json文件轉換爲csv。應該將json中的1個映射中的所有值即{}轉換爲csv文件(比如FILE_A.csv)。

對於上面的例子,

FILE_A.csv,

DAILY,COUNT 
5,5 
0,0 
1,1 

FILE_B.csv,

WEEKLY,COUNT 
14,14 
11,11 
15,15 

FILE_C.csv,

MONTHLY,COUNT 
25,25 
23,23 
22,22 

只會有json中的3張地圖。

任何人都可以建議將json中的3個地圖轉換爲上述結構的3個不同的csv文件的最佳方式?

在此先感謝。

+0

你在哪裏要列名保存在JSON? – Dmitry

+0

@Dmitry:在json列名不存在。我想在三個文件中的每一箇中添加列名。 – Rowen

+0

@Rowen這是通過'json'模塊的標準讀取,在列表中循環並通過'csv'模塊輸出。我建議你看看一些python的介紹(比如[this](http://www.oreilly.com/programming/free/a-whirlwind-tour-of-python.csp)或[this](http:// www.scipy-lectures.org/intro/language/python_language.html)),進行第一次嘗試,然後返回一些您嘗試的代碼。 –

回答

0
data_list = [{ 
"5":"5", 
"0":"0", 
"1":"1"},{ 
"14":"14", 
"11":"11", 
"15":"15"},{ 
"25":"25", 
"23":"23", 
"22":"22"}] 

temp_dct = { "DAILY": data_list[0], "WEEKLY": data_list[1], "MONTHLY": data_list[2]} 
file_name_ord = 65 
for k in ["DAILY", "WEEKLY", "MONTHLY"]: 
    v = temp_dct[k] 
    file_name = "FILE_"+str(chr(file_name_ord))+".csv" 
    file_name_ord+=1 
    data = k + ","+ "COUNT\n" 
    for inner_k, inner_v in v.items(): 
     data += inner_k + ","+inner_v+"\n" 

    with open(file_name, "w") as f: 
     f.write(data) 

也試試這個。希望你能得到你的答案。

+0

感謝您的幫助 – Rowen

0

您可以使用一個簡單的循環與你需要的所有數據,應該是這樣的:

jsondata = [{ 
"5":"5", 
"0":"0", 
"1":"1"},{ 
"14":"14", 
"11":"11", 
"15":"15"},{ 
"25":"25", 
"23":"23", 
"22":"22"}] 

for name, timelapse, data in zip(("A", "B", "C"), 
           ("DAILY", "WEEKLY","MONTHLY",), 
           jsondata): #get data together 
    with open("path/to/your/FILE_{}".format(name), "w") as f: 
     f.write("{}, COUNT\n".format(timelapse)) # write header 
     f.write("\n".join(",".join((k,v)) for k,v in data.items())) #write data separated by ',' 

這裏有一個live example

而且看一看的csv模塊

+0

你能告訴我爲什麼我得到這個錯誤'ValueError:需要超過1個值解包'在這一行'f.write(「\ n」.join(「,」。join((k,v)對於數據中的k,v)))? – Rowen

+0

我沒有在字典上使用'items'方法,我更新了答案 – Netwave

+0

現在對於同樣的語句,它拋出下面的錯誤'TypeError:sequence item 0:expected string,tuple found'。請幫忙 – Rowen

0

直接的解決方案:

import json, csv  

with open('FILE_A.csv', 'w', newline='') as fa, open('FILE_B.csv', 'w', newline='') as fb, \ 
    open('FILE_C.csv', 'w', newline='') as fc: 

    a_writer, b_writer, c_writer = csv.writer(fa), csv.writer(fb), csv.writer(fc) 
    da, db, dc = json.load(open('your.json')) 

    a_writer.writerow(('DAILY','COUNT')) 
    a_writer.writerows(da.items()) 

    b_writer.writerow(('WEEKLY','COUNT')) 
    b_writer.writerows(db.items()) 

    c_writer.writerow(('MONTHLY','COUNT')) 
    c_writer.writerows(dc.items())