본문 바로가기

강의/Python 기초

Chapter 16. JSON ↔ CSV 변환기

반응형

데이터 형식 변환 프로그램 만들기

이번 시간에는 파이썬으로 JSON 파일을 CSV 파일로 바꾸고, 반대로 CSV 파일을 JSON 파일로 바꾸는 프로그램을 만들어 보겠습니다.

JSON과 CSV는 데이터를 저장할 때 많이 사용하는 파일 형식입니다.


JSON과 CSV란?

JSON

JSON은 데이터를 이름표처럼 저장하는 형식입니다.

예를 들면 이렇게 생겼습니다.

[
    {
        "name": "철수",
        "age": 13,
        "score": 90
    }
]

사람이 봐도 이해하기 쉽고, 프로그램에서도 많이 사용합니다.


CSV

CSV는 표처럼 데이터를 저장하는 형식입니다.

name,age,score
철수,13,90
영희,12,85

엑셀에서 열어 보기 좋은 파일입니다.


이번 프로그램에서 만들 기능

이번 프로그램은 다음 기능을 합니다.

  1. JSON 파일을 CSV 파일로 변환하기
  2. CSV 파일을 JSON 파일로 변환하기
  3. 변환 결과를 새 파일로 저장하기

예제 JSON 파일 만들기

먼저 students.json 파일을 만들어 주세요.

[
    {
        "name": "철수",
        "age": 13,
        "score": 90
    },
    {
        "name": "영희",
        "age": 12,
        "score": 85
    },
    {
        "name": "민수",
        "age": 13,
        "score": 95
    }
]

JSON ↔ CSV 변환기 전체 코드

import json
import csv


def json_to_csv(json_file, csv_file):
    with open(json_file, "r", encoding="utf-8") as file:
        data = json.load(file)

    with open(csv_file, "w", newline="", encoding="utf-8-sig") as file:
        fieldnames = data[0].keys()
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        writer.writeheader()
        writer.writerows(data)

    print("JSON 파일을 CSV 파일로 변환했습니다.")


def csv_to_json(csv_file, json_file):
    data = []

    with open(csv_file, "r", encoding="utf-8-sig") as file:
        reader = csv.DictReader(file)

        for row in reader:
            data.append(row)

    with open(json_file, "w", encoding="utf-8") as file:
        json.dump(data, file, ensure_ascii=False, indent=4)

    print("CSV 파일을 JSON 파일로 변환했습니다.")


while True:
    print("\n===== JSON ↔ CSV 변환기 =====")
    print("1. JSON을 CSV로 변환")
    print("2. CSV를 JSON으로 변환")
    print("3. 프로그램 종료")

    choice = input("메뉴를 선택하세요: ")

    if choice == "1":
        json_to_csv("students.json", "students.csv")

    elif choice == "2":
        csv_to_json("students.csv", "students_new.json")

    elif choice == "3":
        print("프로그램을 종료합니다.")
        break

    else:
        print("잘못 입력했습니다. 다시 선택해 주세요.")

코드 설명

import json
import csv

JSON 파일을 다루기 위해 json을 사용합니다.

CSV 파일을 다루기 위해 csv를 사용합니다.


def json_to_csv(json_file, csv_file):

JSON 파일을 CSV 파일로 바꾸는 함수입니다.

함수는 자주 사용하는 코드를 상자처럼 묶어 놓은 것입니다.


data = json.load(file)

JSON 파일 안에 있는 데이터를 파이썬이 사용할 수 있도록 읽어 옵니다.


writer = csv.DictWriter(file, fieldnames=fieldnames)

딕셔너리 모양의 데이터를 CSV 파일로 저장할 준비를 합니다.

여기서 name, age, score 같은 글자가 CSV 파일의 제목 줄이 됩니다.


writer.writeheader()
writer.writerows(data)

writeheader()는 제목 줄을 저장합니다.

writerows(data)는 실제 학생 데이터를 저장합니다.


def csv_to_json(csv_file, json_file):

CSV 파일을 JSON 파일로 바꾸는 함수입니다.


reader = csv.DictReader(file)

CSV 파일을 딕셔너리 형태로 읽어 옵니다.

예를 들어 CSV 파일의 한 줄이 이렇게 바뀝니다.

{
    "name": "철수",
    "age": "13",
    "score": "90"
}

json.dump(data, file, ensure_ascii=False, indent=4)

파이썬 데이터를 JSON 파일로 저장합니다.

ensure_ascii=False는 한글이 깨지지 않게 해 줍니다.

indent=4는 JSON 파일을 보기 좋게 정리해 줍니다.


실행 결과

메뉴에서 1번을 선택하면

JSON 파일을 CSV 파일로 변환했습니다.

라는 메시지가 나옵니다.

그리고 students.csv 파일이 만들어집니다.


메뉴에서 2번을 선택하면

CSV 파일을 JSON 파일로 변환했습니다.

라는 메시지가 나옵니다.

그리고 students_new.json 파일이 만들어집니다.


쉽게 이해하기

JSON은 설명이 자세한 데이터 상자입니다.

CSV는 엑셀 표처럼 생긴 데이터입니다.

파이썬은 이 두 가지 파일을 서로 바꿀 수 있습니다.

즉,

JSON → CSV
CSV → JSON

이렇게 데이터 모양을 바꾸는 프로그램을 만든 것입니다.


정리

이번 시간에는 파이썬으로 JSON 파일과 CSV 파일을 서로 변환하는 프로그램을 만들었습니다.

이 프로그램을 사용하면 데이터를 엑셀에서 보기 좋게 만들 수도 있고, 프로그램에서 사용하기 좋은 JSON 파일로 바꿀 수도 있습니다.

JSON과 CSV는 실제 프로그램에서도 자주 사용하는 파일 형식이기 때문에 꼭 알아 두면 좋습니다.


JSON ↔ CSV 변환기

반응형