Python/Utils

파이썬 XML 데이터 파싱 예제

jimmy_AI 2024. 6. 25. 00:20
반응형

Python에서 xml 형식으로 된 파일의 데이터에서 원하는 정보를 추출하는 방법을

예시를 통하여 간략하게 정리해보도록 하겠습니다.

 

 

기본 예제

다음과 같은 XML 파일이 sample.xml 파일로 저장되어 있다고 가정해보도록 하겠습니다.

<root>
    <child1>
        <subchild1>data1</subchild1>
    </child1>
    <child2>
        <subchild2>data2</subchild2>
    </child2>
</root>

 

이 파일에서 각 값들을 추출하는 파이썬 코드 예시는 다음과 같습니다.

import xml.etree.ElementTree as ET

tree = ET.parse('sample.xml')
root = tree.getroot()

print(f'Root element: {root.tag}')

for child in root:
    print(f'Child element: {child.tag}')
    for subchild in child:
        print(f'Subchild element: {subchild.tag}, Value: {subchild.text}')

 

출력 결과는 다음과 같습니다.

Root element: root
Child element: child1
Subchild element: subchild1, Value: data1
Child element: child2
Subchild element: subchild2, Value: data2

 

 

심화 예제

이번에는 좀 더 복잡한 XML 파일로 아래와 같은 books.xml 파일을 예시로 들어보겠습니다.

<books>
    <book id="1">
        <title>Python Programming</title>
        <author>Jimmy</author>
        <year>2020</year>
        <publisher>
            <name>Tech Books Publishing</name>
            <address>
                <city>Seoul</city>
                <zip>12345</zip>
            </address>
        </publisher>
    </book>
    <book id="2">
        <title>Advanced Python</title>
        <author>Kevin</author>
        <year>2021</year>
        <publisher>
            <name>Pro Coding Press</name>
            <address>
                <city>Incheon</city>
                <zip>67890</zip>
            </address>
        </publisher>
    </book>
</books>

 

다음과 같은 파이썬 코드 예시로 각 책에 대한 정보들을 추출해볼 수 있습니다.

import xml.etree.ElementTree as ET

tree = ET.parse('books.xml')
root = tree.getroot()

print(f'Root element: {root.tag}')

for book in root.findall('book'):
    book_id = book.get('id')
    title = book.find('title').text
    author = book.find('author').text
    year = book.find('year').text
    publisher_name = book.find('publisher/name').text
    publisher_city = book.find('publisher/address/city').text
    publisher_zip = book.find('publisher/address/zip').text

    print(f'Book ID: {book_id}')
    print(f'  Title: {title}')
    print(f'  Author: {author}')
    print(f'  Year: {year}')
    print(f'  Publisher: {publisher_name}')
    print(f'    Address: {publisher_city}, {publisher_zip}')

 

출력된 결과는 다음과 같습니다.

Root element: books
Book ID: 1
  Title: Python Programming
  Author: Jimmy
  Year: 2020
  Publisher: Tech Books Publishing
    Address: Seoul, 12345
Book ID: 2
  Title: Advanced Python
  Author: Kevin
  Year: 2021
  Publisher: Pro Coding Press
    Address: Incheon, 67890