파이썬 xml 태그값 가져오기 및 파싱 :: 개발/일상_Mr.lee

파이썬 xml 태그값 가져오기 및 파싱

Posted by Mr.mandu.
2020. 6. 25. 06:00 개발/python, 딥러닝

안녕하세요.

앞서 xml 파일에 대한 파싱 방법으로 소개한적이 있었습니다.

[개발/java,spring] - java xml 파싱 또다른 방법 sax 파싱

[개발/java,spring] - xls, xlsx 파싱(XSSFWorkbook, HSSFWorkbook, XLSParser)


또한 xml 파일을 생성하는법도 포스팅을 했었습니다.

[개발/java,spring] - jdom,java, xml 파일 생성


하지만 이는 모두 자바를 활용한 xml 파싱 방법이었습니다.

요즘은 파이썬을 주로 다루고 있으니 파이썬으로 xml 파일을 파싱 해보도록 하겠습니다.

사용해보니 파이썬이 자바보다 훨씬 편리하게 사용이 가능하네요.



먼저 현재 test로 생성한 xml 파일을 보여드리겠습니다.

xml 파일은 별 내용이 없습니다.

<annotation>
	<folder>test_folder</folder>
	<filename>testt.jpg</filename>
	<path></path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>1071</width>
		<height>1717</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>W</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>1013</xmin>
			<ymin>1116</ymin>
			<xmax>1043</xmax>
			<ymax>1146</ymax>
		</bndbox>
	</object>
	<object>
		<name>L</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>1018</xmin>
			<ymin>896</ymin>
			<xmax>1047</xmax>
			<ymax>917</ymax>
		</bndbox>
	</object>
</annotation>

이제 xml 파일을 파싱하는 파이썬 소스를 적어보겠습니다.

라이브러리 선언이 필요합니다.

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, dump, ElementTree

파일 불러오기 및 root 노드 선언

xml_file = 'D:\\test.xml'
doc = ET.parse(xml_file)
#root 노드 가져오기
root = doc.getroot()




여기까지 준비를 하면 기본 세팅은 끝났습니다.

이제 xml 태그중 size 태그를 선택해보겠습니다.

값을 가져오는것이 아닌 선택입니다.

size 태그를 모두 가져옵니다.

size_tag = root.findall("size")

그중에 첫번째 size태그 중

width 태그 값을 가져오기 위해서는 다음과 같이 사용합니다.

print(size_tag[0].find("width").text)

이렇게 태그 값들을 파싱하여 사용하면 됩니다.

이렇게 하나씩 선택하는것 말고 더욱 편리하게 사용하는 방법이 있습니다.

현재 제가 사용하고 있는 방법입니다.

전체 태그를 선택하여 반복문으로 값들을 컨트롤 합니다.

for object in root.iter("object"):
    print(object.find("bndbox").findtext("xmin"))

object 의 태그를 선택하고 iter로 반복문을 돌리며 태그를 선택합니다.

그리고 findtext로 선택 태그를 입력하여 값들을 가져옵니다.

위의 태그들은 위의 xml 파일에 있는 태그들이니 본인에 맞게 사용하시면 됩니다.

출력결과는 아래와 같습니다.


즐거운 하루 보내세요.