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])
'Python > python' 카테고리의 다른 글
Selenium (0) | 2020.11.09 |
---|---|
Web site 경로를 따라가 데이터 찾기 (0) | 2020.11.06 |
Python을 이용한 데이터 시각화 (0) | 2020.11.03 |
예외 처리 사용하기 (0) | 2020.10.20 |
클래스 상속 사용하기 (0) | 2020.10.19 |