320x100
320x100
1. 간단한 설명
공부하던 중에 XML 파일을 만들어야하는 일이 생겨 알아보았다. 정의나 개념 같은 건 넘어가고 어떻게 구현하는 지만 정리해보고자 한다. Python에서는 XML을 표준 라이브러리로 지원하기 때문에 별도의 다운없이 바로 import해서 사용해주면 된다고 한다.
주로 사용하는 함수와 사용법은 아래와 같다.
- Element( ) 함수로 root tag를 잡고, 거기에 SubElement( )로 하위 tag를 추가하는 방식으로 작성하면 된다.
( XML을 잘 몰라서 tag라는 용어로 쓰는 건지도 잘 모르겠다..) - SubElement( ) 함수는 반환값으로 객체를 반환하기는 하는데 굳이 변수를 만들어서 받아주지 않아도 된다.
하위 tag에 하위 tag를 또 추가하고 싶은 경우에만 반환값을 받아오면 된다. - ElmentTree( ) 함수는 작성한 XML 내용을 파일로 저장 할 때 사용해주면 된다.
2. 파이썬 코드
from xml.etree.ElementTree import Element, SubElement, ElementTree
filename = '01_manual'
width = 500
height = 500
point1 = (300, 400)
point2 = (250, 350)
label = 'cross'
root = Element('annotation')
SubElement(root, 'folder').text = 'custom_images'
SubElement(root, 'filename').text = filename + '.gif'
SubElement(root, 'path').text = './object_detection/images' + filename + '.gif'
source = SubElement(root, 'source')
SubElement(source, 'database').text = 'Unknown'
size = SubElement(root, 'size')
SubElement(size, 'width').text = str(width)
SubElement(size, 'height').text = str(height)
SubElement(size, 'depth').text = '1'
SubElement(root, 'segmented').text = '0'
obj = SubElement(root, 'object')
SubElement(obj, 'name').text = label
SubElement(obj, 'pose').text = 'Unspecified'
SubElement(obj, 'truncated').text = '0'
SubElement(obj, 'difficult').text = '0'
bbox = SubElement(obj, 'bndbox')
SubElement(bbox, 'xmin').text = str(point1[0])
SubElement(bbox, 'ymin').text = str(point1[1])
SubElement(bbox, 'xmax').text = str(point2[0])
SubElement(bbox, 'ymax').text = str(point2[1])
tree = ElementTree(root)
tree.write('./' + filename +'.xml')
3. 결과 XML File
< 참고 사이트 >
https://mystyle1057.tistory.com/entry/Python-XML-%EC%B2%98%EB%A6%AC
https://codeday.me/ko/qa/20190312/29697.html
'Python' 카테고리의 다른 글
Python으로 지정 경로에 폴더 존재하는지 확인하고 없으면 폴더 생성하는 방법 (1) | 2021.08.31 |
---|---|
Anaconda, Python, CMD, 명령어 정리 (0) | 2021.08.31 |
Python file 우클릭 시 context menu에 Anaconda 가상환경 idle 뜨게 하는 방법 (0) | 2021.08.31 |
Python으로 시스템 변수 추가하는 방법 (0) | 2021.08.31 |
이미지 읽는 방법 / cv.imdecode( ), io.BytesIO( ) (8) | 2020.03.16 |