[ Python ] xml 파일 형식에서 원하는 부분 빼서 사용해보기

2019. 5. 16. 20:25분석 Python/구현 및 자료

 

 

이번에는 xml을 다뤄야 해서,

여기서 원하는 것을 빼는 것을 연습해보겠습니다. 

 

현재 옆에 보시면  annotation 한 것 중에서

저는 object에서 name과 bndbox를 빼고 싶다고 합시다.

 

렇다면 어떻게 해야 할까요?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  여기서 보시면은 root를 보면 위에서 처럼 annotation이 나옵니다

 

이제 그다음 그 뿌리를 얻으려면 getchildren을 해야 합니다

 

해보면 위에 그림과 같이 뿌리를 보여주는 것을 알 수 있습니다.

 

여기서 보면 알 수 있듯이 결국 어딜 하나를 들어가서 

그다음에 뿌리를 보고 또 뿌리를 보고 계속계속 들어가면 되는 구조인 것 같습니다.

그 다음 원하는 것을 얻기 위해 re로 object만 빼냅니다.

object_ = [ i for i in child if re.search("object",str(i)) is not None ]

 

한 가지 경우만 봐볼까요?

또 파고 들어가서 거기서 내가 원하는 name과 bndbox만 빼내옵니다.

 

그다음에 저는 이 것을 좌표값 , tag 값으로 달 필요가 있기 때문에 한 문장으로 만들어줘야 했습니다.

여기서 실제 다 들어갔다 싶어서 값을 얻고 싶으면 저는 text를 했으면 됐습니다.

그래서 밑에는 내가 원하는 구조로 바꾸는 거고 다음과 같이 한 문장이 만들어집니다.

 

text = []
for j in object2 :
    if re.search("bndbox" , str(j)) is not None :
        object3 = j.getchildren()
        store = [k.text for k in object3]
        loc = "{} , {} , {} , {} , {} , {} , {} , {}"\
        .format(store[0] , store[3] , store[2] , store[3] , store[2] , store[1] ,  store[0] , store[1])
        text.append(loc)
    else :
        text.append(j.text)
out =  text[1] + " , " + text[0]
print(out)

## 446 , 194 , 766 , 194 , 766 , 135 , 446 , 135 , 이복고

 

이상으로 간단하게 xml에서 원하는 값을 얻어보는 것을 했습니다.

딱 봐도 Loop 지옥이......................

 

 

728x90