WEB 데이터 형식
: XML / JSON / YAML / CSV / TSV / Excel / PDF ...
데이터의 형식
: Text형식
- 일반적으로 에디터로 편집할 수 있는 데이터 포맷
- 자연어(한국어, 영어, 중국어, 일어, ...)와 숫자로 구성된 데이터
- 특수문자(탭, 줄 바꿈, 제어 문자들)
- ex) XML / JSON / YAML / CSV ...
- 장점> 편집을 쉽게 할 수 있다. 설명을 포함해서 쓸 수 있기 때문에 가독성이 좋다.
- 단점> 보안성이 떨어진다. 바이너리 데이터보다 데이터 크기가 크다.
: Binary형식
- 텍스트 형식을 제외한 나머지
- 문자와 상관없이 데이터를 사용할 수 있는 데이터
- 장점> 데이터 크기가 작다. 보안성이 좋다.
- 단점> 에디터로 편집할 수 없다. 어떤 데이터가 있는지 정의를 해서 사용을 해야 한다.
- 웹상에서는 바이너리 데이터 형식을 대부분 많이 사용한다.
- 이미지나 동영상 때문 (용량이 커지면 서버의 부담이 커지기 때문에)
- 이미지는 압축률이 좋아야 한다. (jpeg, gif, png 등 이러한 바이너리 형식을 사용한다.)
- 바이너리 형식을 사용하는 것이 훨씬 실용적이기 때문에 많이 사용함
텍스트 형식의 주의점
: 어떤 문자코드(문자 인코딩)로 저장돼있느냐에 따라 다른 의미를 갖게 되므로 같은 문장을
텍스트로 저장할 때 인코딩 문제를 해결해 주어야 한다.(EUC-KR ==> UTF-8 방식을 많이 사용한다.)
YAML
: YAML Ain't Markup Language
: 들여쓰기를 사용해 계층 구조를 표현하는 것이 특징인 데이터 형식
: XML보다 간단하며, JSON과 거의 비슷하다
: JSON 대용으로 많이 사용되기도 하고, 애플리케이션 설정 파일을 작성할 때 많이 사용한다.
: 웹 프레임워크인 Ruby나 Symfony(PHP)의 설정 파일 형식으로 사용되고 있다.
: 파이썬/PHP/루비 등을 포함한 여러 프로그래밍 언어에서 YAML 형식을 다루기 위한 라이브러리가 제공되고 있다.
: 파이썬에서 YAML을 다루기 위해서 PyYAML이라는 모듈을 설치해야 한다.
pip install pyyaml # OR pip3 install pyyaml
YAML 데이터 형식
: YAML의 기본은 배열, 해시, 스칼라(문자열, 숫자, 불리언)입니다.
: 배열을 나타낼 때는 하이픈(-)을 붙여서 사용한다. 하이픈 뒤에는 공백을 사용해야한다
- apple - orange - banana
: 중첩 배열(배열 안에 배열)
- Yellow - # 한칸 비워주고 - orange # 들여쓰기 - banana - Red - - apple - strawberry
: 해시 표현방법 - 해시는 자바스크립의 객체와 같은 것을 의미("키" : 값)
name : hong age : 24 color : white
: 해시의 계층구조 표현 방법
name : kim property : age : 10 color : brown
: 배열과 해시를 조합하면 조금 더 복잡한 데이터를 표현할 수 있다.
- name : lee color : brown age : 20 hobby : - sports - watching movies - name : smith color : white age : 15 hobby : - music - reading
: YAML은 플로우 스타일(Flow Style)이 지원된다.
- 플로우 스타일은 한줄로 표현할 수 있는 방법을 말한다.
- 쉼표(,)와 콜론(:) 뒤에는 반드시 공백이 있어야 한다.
- name : lee hobby : ["sports", "watching movies"] - name : smith hobby : ["music", "reading"]
: YAML은 주석을 사용할 수 있다. 기호는 "#"으로 시작한다.
# 노란색 과일 - banana - orange
: 여러 줄의 문자열을 지정할 수 있다.
multi-line : | # Shift + \ I am a boy. I am a student. I like Orange.
: YAML의 앵커와 별칭(alias)
&aaa1 : 일종의 변수 선언 <--- 앵커라고 부른다. *aaa1 <----별칭이라고 한다. &aaa1 "bbbb" *aaa1은 &aaa1의 별칭이다.
YAML Exam
import yaml yaml_data = """ color_def: - &col1 "#ff0000" - &col2 "#00ff00" - &col3 "#0000ff" color: title1: *col1 title2: *col2 title3: *col3 """ data = yaml.load(yaml_data) # 별칭을 이용한 출력 print("title1 = ", data["color"]["title1"]) print("title2 = ", data["color"]["title2"]) print("title3 = ", data["color"]["title3"])

파이썬 데이터를 YAML로 쓰기
: yaml.load(str) : str(YAML)을 파이썬 데이터로 변환
: yaml.dump(value) : value(파이썬 데이터)를 YAML 형식으로 출력
import yaml person = [ {"name": "HongGilDong", "age": "30", "gender": "man"}, {"name": "HongGilSun", "age": "25", "gender": "woman"}, {"name": "KimGilDong", "age": "24", "gender": "man"} ] yaml_data = yaml.dump(person) print(yaml_data) print("------------------------------------") # YAML 데이터를 파이썬 데이터로 변환하기 data = yaml.load(yaml_data) for person in data: print(person["name"] + " - " + person["age"] + " - " + person["gender"])

CSV 파일 불러오기
사용한 csv 파일
import codecs fileName = "prod_list.csv" csv = codecs.open(fileName, "r", "EUC-KR").read() data = [] records = csv.split("\r\n") # \r : CR , #\n : LF(nre line) for rec in records: if rec == "": continue fields = rec.split(",") data.append(fields) for field in data: print(field[1], field[2])

파이썬의 csv모듈을 이용한 CSV데이터 처리방법
: CSV파일에 있는 필드 데이터가 큰따옴표(")로 둘러 쌓인 경우에는 CSV파일을 분석하기가 어렵다.
: 따라서 이때에는 csv모듈을 이용하는데
: csv파일을 읽어올 때 사용하는 메소드
- csv.reader(파일포인터, delimiter=", ", quotechar='"')
: delimiter는 구분 문자를 지정하고, quotechar는 어떤 기호로 데이터를 감싸고 있는지 지정한다.
: csv파일을 만들때 사용하는 메소드
- csv.writer(파일포인터, delimiter=", ", quotechar='"')
: CSV 파일 생성
import csv, codecs with codecs.open("test.csv", "w", "UTF-8") as fp: writer = csv.writer(fp, delimiter=",", quotechar='"') writer.writerow(["상품코드", "상품이름", "가격"]) writer.writerow(["1", "KeyBoard", "20000"]) writer.writerow(["2", "Mouse", "10000"]) writer.writerow(["3", "Monitor", "100000"])

: CSV 파일 불러오기
import csv, codecs fp = codecs.open("test.csv", "r", "UTF-8") file = csv.reader(fp, delimiter=",", quotechar='"') for data in file: print(data[0], data[1], data[2])
