본문으로 바로가기

WEB 데이터 형식

category Python/python 2020. 11. 13. 12:13

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