CSV라 쓰고 SCV라 읽는다....
CSV(comma-seperated variables) 필드를 (,) 쉼표 단위로 구분한 텍스트데이터 파일이다!
filename.csv
이름 | 나이 | 직업 |
---|---|---|
Amuse | 18 | developer |
Ellie | 18 | developer |
이러한 데이터를 CSV 로 나타낸다면 이렇게 나타낼 수 있다.
이름, 나이, 직업
Amuse, 18, developer
Ellie, 18, developer
호환되지 않는 포멧을 사용하는 프로그램 끼리 자료를 전달할때 사용된다.
사람과 기계 입장에서 이해하기 쉽고 직관적인 데이터 구조이다. 간단한 소프트웨어로 수정하기 쉬우며, 사람이 직접 수정도 가능하다. 그리고 다른 형식에 비해 간결해서 용량이 작다
데이터 오염에 매우매우 취약한 포멧이다. 데이터에 쉼표가 들어갈 경우.. 지옥이 펼쳐진다. (예를 들어 본문 필드에 (,)가 들어갈 경우) 해결책은 쉼표를 문자열로 감싸거나 TSV(Tab-seperated value) 쉼표대신 탭문자(\t)를 사용해서 구분한다.
장점과 단점을 나열해 놓고봐도 치명적인 단점때문에 많이 쓰일것 같지 않지만, IT산업계에서 널리 쓰이는 이유는 ⚡️작은 데이터 크기 때문이다. json과 비교해도 2, 3배 용량이 차이나며 parsing 방법도 매우 간단해서 코드길이도 매우 짧다. 로드하는 데이터 크기가 기가바이트 단위를 바라본다면 오버헤드도 무시할 수 없는 문제가 되는데 이런곳에서 CSV의 강점이 잘 나타난다. 또한 압축도 잘되고 스트림 압충이 가능해서 데이터 일부만 수신된 상태에서도 데이터 적재 작업이 가능하니 꼭 사용법을 익혀두도록하자!
import os
import django
import csv
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "housetomorrow.settings")
django.setup()
from product.models import Menu
with open('Menu-Menu.csv') as in_file:
data_reader = csv.reader(in_file)
next(data_reader, None)
for row in data_reader:
Menu.objects.create(name=row[0])