2017-09-20 1 views
2

안녕하세요. 저는 파이썬에 대해 매우 익숙합니다. 샘플 json 파일이이 형식으로 있습니다.지도 배열 json을 csv로 변환

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

나는 특정 방법으로 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 개의지도.

누구나 위의 구조의 3 개의 다른 CSV 파일로 json의 3 개의지도를 변환하는 가장 좋은 방법을 제안 할 수 있습니까?

미리 감사드립니다.

+0

당신이 JSON에서 열 이름을 저장하려고합니까? – Dmitry

+0

@Dmitry : json 열 이름이 없습니다. 각 3 개의 파일에 열 이름을 추가하고 싶습니다. – Rowen

+0

@Rowen 이것은'json' 모듈을 통해 목록을 반복하고'csv' 모듈을 통해 출력하는 다소 표준적인 방법입니다. 파이썬 소개 (예 : [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 :이 줄에'unpack 할 값이 두 개 이상 필요합니다''f.write ("\ n".join (",". join ((k, v) 데이터에 대한 k, v)))'? – Rowen

+0

dict에'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())