간단한 텍스트 파일은 단지 라인으로 구성되어 있습니다. 클라이언트가 서버에게 데이터를 요청하면 서버로부터 데이터를 받는 상황을 생각해봅시다. 서버에서 클라이언트로 데이터를 건네줘야하는데 이때 단지 라인으로 구성되어 있는 텍스트파일을 떡 하고 줘버리면 클라이언트 입장에서 이게 무슨 데이터인지 참 난감한 상황에 빠질겁니다. 클라이언트에서 알아보기 쉽도록 텍스트를 '구조화'할 필요가 있습니다. 대표적인 '구조화' 형식은 다음과 같습니다.

  1. CSV
  2. XML
  3. JSON
  4. YAML

 

 

 

CSV 파일 다루기


.csv 파일은 스프레드시트-데이터베이스 간의 데이터 교환 형식입니다. 개인이 CSV Parser를 만들 수도 있겠지만, 그것보단 표준 csv 모듈을 사용해서 파싱하는게 더 좋은 판단입니다. 

import csv

data = [
    ['Doctor', 'No'],
    ['Rosa', 'Klebb'],
    ['Mister', 'Big'],
    ['Auric', 'Goldfinger'],
    ['Ernst', 'Blofeld'],
    ]
    
with open('data', 'wt') as fout:
    csvout = csv.writer(fout)
    csvout.writerows(data)

 

위의 예제는 아래 내용의 파일을 생성합니다.

Doctor,No

Rosa,Klebb

Mister,Big

Auric,Goldfinger

Ernst,Blofeld

 

 

 

XML 파일 다루기


프로그램 간에 자료구조를 교환하기 위해 텍스트를 계층구조로 나타내고 싶을 수도 있습니다. XML은 가장 잘 알려진 마크업 형식입니다. XML은 데이터를 구분하기 위해 태그(tag)를 사용합니다. 다음은 간단한 menu.xml 파일 예제입니다.

<?xml version="1.0"?>
<menu>
    <breakfast hours="7-11">
        <item price="&6.00">breakfast burritos</item>
        <item price="&4.00">pancakes</item>
    </breakfast>
    <lunch hours="11-3">
        <item price="&5.00">hamburger</item>
    </lunch>
    <dinner hours="3-10">
        <item price="&8.00">spaghetti</item>
    </dinner>
</menu>

 

파이썬에서 XML 형식을 파싱하는 간단한 방법은 ElementTree 모듈을 사용하는 것입니다. 다음은 menu.xml 파일을 파싱하여 태그와 속성을 출력하는 예제입니다.

import xml.etree.ElementTree as et  # 'et'로 별칭을 붙입니다.

tree = et.ElementTree(file='menu.xml')
root = tree.getroot()  # root.tag 를 출력해보면 'menu'가 출력됩니다.

for child in root:
    print('tag:', child.tag, 'attributes:', child.attrib)
    for grandchild in child:
        print('\ttag:', grandchild.tag, 'attributes:', grandchild.attrib)

 

ElementTree 모듈은 XML에서 파생된 데이터를 검색하고 수정할 수 있는 다양한 방법을 제공합니다.

 

 

 

JSON 파일 다루기


파이썬에는 JSON 형식을 파싱하기 위한 'json' 모듈이 있습니다. json 모듈을 이용하면 데이터를 간단히 JSON 형식으로 인코딩하고, JSON 형식을 데이터로 디코딩할 수 있습니다. 예제를 살펴보겠습니다.

import json

# json 형식으로된 데이터를 정의합니다.
menu = {
    "breakfast": {
        "hours": "7-11",
        "items": {
            "breakfast burritos": "$6.00",
            "pancakes": "$4.00"
        }
    },
    "lunch": {
        "hours": "11-3",
        "items": {
            "hamburger": "$5.00"
        }
    },
    "dinner": {
        "hours": "3-10",
        "items": {
            "spaghetti": "$8.00"
        }
    }
}

menu_json = json.dumps(menu)  # 위의 데이터를 JSON 문자열로 '인코딩'합니다.
print(menu_json)

menu2 = json.loads(menu_json)  # JSON 문자열을 데이터로 '디코딩'합니다.

 

 

 

YAML 파일 다루기


표준 파이썬 라이브러리에는 YAML 형식을 처리할 수 있는 모듈이 없습니다. 그렇기 때문에 YAML 형식을 처리하고 싶다면 third-party 라이브러리를 사용하셔야 합니다. 대표적으로 yaml 모듈이 있습니다.

'Programming > Python' 카테고리의 다른 글

[Python] 문자열 입력받기 - input() 함수  (0) 2019.11.28
[Python] 파일 입출력  (0) 2019.06.11
[Python] private 네임 맹글링  (0) 2019.06.10
[Python] 클래스(class)  (0) 2019.06.10
[Python] 클로저(Closure)  (0) 2019.06.07