IT

json 파일을 excel 파일로 변환하기 with Python

yuwal6 2022. 7. 13. 19:01

필자는 백엔드 개발을 하고 있기 때문에 json 데이터를 굉장히 많이 다룬다.

보통 비개발자분들은 excel 파일로 받는걸 선호해서 변환 스크립트를 만들어서 사용중이다.

 

import json
import sys
from datetime import datetime, timedelta, timezone

from xlsxwriter import Workbook

def make_xlsx(input_file_name, output_file_name, list_key_name):
    with open(input_file_name, 'r') as f:
        resp = f.read()

    resp = json.loads(resp)

    if not list_key_name:
        dict_list = resp
    else:
        dict_list = resp[list_key_name]

    ordered_list= list(dict_list[0].keys())

    wb=Workbook(output_file_name)
    ws=wb.add_worksheet("sheet1")

    first_row=0
    for header in ordered_list:
        col=ordered_list.index(header)
        ws.write(first_row,col,header)

    row=1
    for entry in dict_list:
        for _key,_value in entry.items():
            col=ordered_list.index(_key)
            if type(_value) == list:
                _value = str(_value)

            # if _key == "time":
            #     utc_time = datetime.fromtimestamp(int(_value / 1000), timezone.utc)
            #     kst_time = utc_time + timedelta(hours=9)
            #     formatted_time = kst_time.strftime('%Y-%m-%d %H-%M-%S')
            #     _value = formatted_time

            ws.write(row,col,_value)
        row+=1
    wb.close()


if __name__ == '__main__':
    list_key_name = sys.argv[3] if len(sys.argv) > 3 else None

    make_xlsx(
        input_file_name=sys.argv[1],
        output_file_name=sys.argv[2],
        list_key_name=list_key_name
    )

# How to use
# - python main.py data.json output.xlsx
#
# Example input data
# [
#     {
#         "a": 10,
#         "b": 20
#     },
#     ...

 

사용하기 위해서는 엑셀 관련 라이브러리가 하나 필요하다. 아래 명령어로 설치

 

 pip install xlsxwriter

 

사용법은 쉽지만 데이터 포맷을 살짝 맞춰줘야 한다.

 

[
    {
        "col1": "value1",
        "col2": "value2",
        "col3": "value3"
    },
    {
        "col1": "value1",
        "col2": "value2",
        "col3": "value3"
    }
]

위와 같은 형태로 포맷을 만들고 리스트를 가리키는 키값을 실행시 전달하면 된다.

 

사용법

python test.py 입력파일명 출력파일명
ex) python test.py data.json output.xlsx

 

출력결과

 

코드가 간단해서 상황에 맞춰서 수정해서 사용해도 편함.