import json
data = {"이름": "영희", "나이": 30}
# Python 객체를 JSON 문자열로 변환
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str){
"이름": "영희",
"나이": 30
}
csv, csv.reader, csv.writer, json, json.load, json.dumps
CSV(Comma-Separated Values) 파일은 데이터를 쉼표(,)로 구분하여 저장하는 텍스트 파일 형식이다. 주로 엑셀(Excel), 데이터베이스, 웹 애플리케이션 등에서 데이터를 저장하고 교환하는 데 사용된다. CSV 파일은 일반적으로 행(row)과 열(column) 형태로 데이터를 저장하며, 각 행은 줄바꿈 문자(\n), 각 열은 쉼표(,)로 구분된다.
| 기능 | 함수 |
|---|---|
| CSV 파일 쓰기 (리스트) | csv.writer(file).writerows(data) |
| CSV 파일 읽기 (리스트) | csv.reader(file) |
| CSV 파일 쓰기 (딕셔너리) | csv.DictWriter(file, fieldnames=[]) |
| CSV 파일 읽기 (딕셔너리) | csv.DictReader(file) |
| 헤더 추가 | writer.writeheader() |
| CSV 구분자 변경 | csv.writer(file, delimiter=";") |
| 파일 존재 여부 확인 | os.path.exists("파일명") |
Python의 csv 모듈을 활용하면 엑셀 파일을 다루듯이 데이터를 쉽게 저장하고 읽을 수 있다.
이름,나이,직업
철수,25,학생
영희,30,개발자
민수,28,디자이너Python에서 CSV 파일을 저장할 때는 csv 모듈을 사용한다.
CSV 파일 저장 (writerow())
import csv
# 저장할 데이터
data = [
["이름", "나이", "직업"],
["철수", 25, "학생"],
["영희", 30, "개발자"],
["민수", 28, "디자이너"]
]
# CSV 파일로 저장
with open("data.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file) # CSV 작성 객체 생성
writer.writerows(data) # 여러 행을 한 번에 저장data.csv 파일)이름,나이,직업
철수,25,학생
영희,30,개발자
민수,28,디자이너csv.writer(file): CSV 작성 객체 생성writerow(): 한 행씩 저장writerows(): 여러 행을 한 번에 저장newline="": 줄바꿈 문제를 방지CSV 파일을 읽을 때는 csv.reader()를 사용하여 데이터를 리스트로 변환할 수 있다.
CSV 파일 읽기 (reader())
import csv
# CSV 파일 읽기
with open("data.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file) # CSV 읽기 객체 생성
for row in reader:
print(row)출력
['이름', '나이', '직업']
['철수', '25', '학생']
['영희', '30', '개발자']
['민수', '28', '디자이너']csv.reader(file): CSV 읽기 객체 생성(1) CSV 파일을 딕셔너리로 저장 (DictWriter)
딕셔너리(dict) 데이터를 CSV 파일로 저장할 수도 있다.
import csv
# 딕셔너리 데이터
data = [
{"이름": "철수", "나이": 25, "직업": "학생"},
{"이름": "영희", "나이": 30, "직업": "개발자"},
{"이름": "민수", "나이": 28, "직업": "디자이너"}
]
# CSV 파일 저장
with open("data_dict.csv", "w", newline="", encoding="utf-8") as file:
fieldnames = ["이름", "나이", "직업"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader() # 헤더 저장
writer.writerows(data) # 데이터 저장출력 (data_dict.csv 파일)
이름,나이,직업
철수,25,학생
영희,30,개발자
민수,28,디자이너csv.DictWriter(file, fieldnames=[]): 딕셔너리를 CSV로 저장하는 객체writeheader(): 헤더(Header) 저장writerows(): 여러 개의 딕셔너리를 한 번에 저장(2) CSV 파일을 딕셔너리로 읽기 (DictReader)
import csv
# CSV 파일 읽기
with open("data_dict.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file) # 딕셔너리 형태로 읽기
for row in reader:
print(row){'이름': '철수', '나이': '25', '직업': '학생'}
{'이름': '영희', '나이': '30', '직업': '개발자'}
{'이름': '민수', '나이': '28', '직업': '디자이너'}csv.DictReader(file): CSV 데이터를 딕셔너리(dict) 형태로 변환dict 형태로 반환됨import os
import csv
file_name = "data.csv"
if os.path.exists(file_name):
with open(file_name, "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
else:
print("파일이 존재하지 않습니다.")CSV 파일에서 특정 열(column)만 선택하여 읽을 수도 있다.
import csv
with open("data.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader) # 헤더 건너뛰기
for row in reader:
print(row[0]) # '이름' 열만 출력기본적으로 CSV는 쉼표(,)로 구분되지만, 세미콜론(;) 또는 탭(\t)으로 변경할 수도 있다.
(1) 세미콜론(;)으로 구분
with open("data_semicolon.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file, delimiter=";") # 구분자 변경
writer.writerows(data)(2) 탭(\t)으로 구분
with open("data_tab.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file, delimiter="\t")
writer.writerows(data)JSON(JavaScript Object Notation)은 데이터를 저장하고 전송하기 위한 경량 데이터 형식으로, Python에서는 json 모듈을 사용하여 JSON 파일을 읽고 쓸 수 있다. JSON은 키-값 쌍으로 이루어진 구조이며, Python의 dict와 유사하다. 따라서 Python의 딕셔너리, 리스트 등의 자료형을 JSON 파일로 저장하거나 불러올 수 있다.
| 기능 | 함수 |
|---|---|
| Python 객체 → JSON 파일 저장 | json.dump(data, file) |
| JSON 파일 → Python 객체 읽기 | json.load(file) |
| Python 객체 → JSON 문자열 변환 | json.dumps(data) |
| JSON 문자열 → Python 객체 변환 | json.loads(json_string) |
| JSON을 보기 좋게 저장 | indent=4 |
| 한글 깨짐 방지 | ensure_ascii=False |
JSON 파일은 아래와 같은 형태로 구성된다.
{
"이름": "철수",
"나이": 25,
"취미": ["축구", "독서", "영화 감상"],
"주소": {
"도시": "서울",
"우편번호": "12345"
}
}" ")로 감싸야 한다.[]로 감싸서 사용한다.{}로 감싸서 키-값 쌍을 사용한다.Python 객체(딕셔너리, 리스트 등)를 JSON 파일로 저장할 수 있다.
JSON 파일 저장
import json
# 저장할 데이터 (Python 딕셔너리)
data = {
"이름": "철수",
"나이": 25,
"취미": ["축구", "독서", "영화 감상"],
"주소": {
"도시": "서울",
"우편번호": "12345"
}
}
# JSON 파일로 저장
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4)출력(data.json 파일 내용)
{
"이름": "철수",
"나이": 25,
"취미": ["축구", "독서", "영화 감상"],
"주소": {
"도시": "서울",
"우편번호": "12345"
}
}json.dump(data, file): Python 객체를 JSON 파일로 저장한다.ensure_ascii=False: 한글을 올바르게 저장하기 위해 사용 (기본값 True이면 유니코드 변환됨)indent=4: JSON 파일을 보기 좋게 정렬JSON 파일을 읽어서 Python 객체로 변환할 수 있다.
JSON 파일 읽기
import json
# JSON 파일 열기
with open("data.json", "r", encoding="utf-8") as file:
data = json.load(file) # JSON을 Python 객체로 변환
# 데이터 출력
print(data)
print(data["이름"]) # '철수'
print(data["취미"]) # ['축구', '독서', '영화 감상']json.load(file): JSON 파일을 읽어서 Python 객체로 변환한다.dict) 또는 리스트(list)로 변환됨.json.dumps()와 json.loads()를 사용한다.(1) Python 객체 → JSON 문자열 (dumps())
import json
data = {"이름": "영희", "나이": 30}
# Python 객체를 JSON 문자열로 변환
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str){
"이름": "영희",
"나이": 30
}
(2) JSON 문자열 → Python 객체 (loads())
import json
json_str = '{"이름": "영희", "나이": 30}'
# JSON 문자열을 Python 객체로 변환
data = json.loads(json_str)
print(data["이름"]) # '영희'영희
(1) 리스트 데이터를 JSON으로 저장하고 읽기
import json
# 리스트 데이터
fruits = ["사과", "바나나", "포도"]
# JSON 파일로 저장
with open("fruits.json", "w", encoding="utf-8") as file:
json.dump(fruits, file, ensure_ascii=False)
# JSON 파일 읽기
with open("fruits.json", "r", encoding="utf-8") as file:
fruits_list = json.load(file)
print(fruits_list) # ['사과', '바나나', '포도'](2) JSON 파일이 존재하는지 확인 후 읽기
파일이 존재하는지 확인한 후 JSON을 읽으면 오류를 방지할 수 있다.
import os
import json
file_name = "data.json"
if os.path.exists(file_name): # 파일 존재 여부 확인
with open(file_name, "r", encoding="utf-8") as file:
data = json.load(file)
print(data)
else:
print("파일이 존재하지 않습니다.")