[Python] 구조화된 텍스트 파일 다루기 - XML, JSON, YAML
간단한 텍스트 파일은 단지 라인으로 구성되어 있습니다. 클라이언트가 서버에게 데이터를 요청하면 서버로부터 데이터를 받는 상황을 생각해봅시다. 서버에서 클라이언트로 데이터를 건네줘야하는데 이때 단지 라인으로 구성되어 있는 텍스트파일을 떡 하고 줘버리면 클라이언트 입장에서 이게 무슨 데이터인지 참 난감한 상황에 빠질겁니다. 클라이언트에서 알아보기 쉽도록 텍스트를 '구조화'할 필요가 있습니다. 대표적인 '구조화' 형식은 다음과 같습니다.
- CSV
- XML
- JSON
- 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 |
댓글
이 글 공유하기
다른 글
-
[Python] 문자열 입력받기 - input() 함수
[Python] 문자열 입력받기 - input() 함수
2019.11.28 -
[Python] 파일 입출력
[Python] 파일 입출력
2019.06.11 -
[Python] private 네임 맹글링
[Python] private 네임 맹글링
2019.06.10 -
[Python] 클래스(class)
[Python] 클래스(class)
2019.06.10