【Python】XMLのデータを読み取り・書き込みする(ElementTree)

スポンサーリンク

PythonでXMLを読み取り・書き込みする方法について。

この記事の内容はコチラです

  • PythonからXMLを読み取り・書き込みする
  • 「xml.etree.ElementTree」モジュールの使い方を知る

今回は、PythonでXMLを読み取り・書き込みする「xml.etree.ElementTree」モジュールの使い方を解説します。

PythonでXMLを解析する

Pythonでは、XMLのデータ(テキスト、コンテンツ)を読み取り・書き込みすることができます。PythonでXMLを読み取り・書き込みするには、「xml.etree.ElementTree」モジュールを使います。

サンプルXML

sports.xml

<?xml version="1.0" encoding="UTF-8" ?>
<sports>
  <sport>
    <name>サッカー</name>
    <orgin>イングランド</orgin>
  </sport>
  <sport>
    <name>野球</name>
    <orgin>アメリカ</orgin>
  </sport>
</sports>

このXMLのサンプルで読み取り・書き込みを行っていきます。

XMLを解析する

PythonでXMLを読み取るには、「解析」→「要素・データ取得」という流れになります。XMLを解析する方法は2パターンあります。

  1. XMLファイル
  2. XMLデータ(変数)

1.XMLファイルを解析する

import xml.etree.ElementTree as ET 

# XMLファイルを解析
tree = ET.parse('c:\\pg\sports1.xml') 

# XMLを取得
root = tree.getroot()

まず最初に「XMLファイル」を読み取るパターンです。

PythonでXMLを扱うには、「xml.etree.ElementTree」をインポートします。

「parse」でXMLを解析します。パラメータはファイルのパスです。その結果を「getroot」で取得しルート変数「root」へ格納します。

2.XMLデータを解析する

import xml.etree.ElementTree as ET 

# XMLを取得
root = ET.fromstring(sports_xml)

次はファイルではなく、XMLデータを読み取るパターンです。XMLが変数に入っているパターンです。

PythonでXMLを扱うには、「xml.etree.ElementTree」をインポートします。

XMLの構造がそのままセットされた変数「sports_xml」を「fromstring」のパラメータにセットします。解析した結果がルート変数「root」へ格納されます。

PythonでXMLを読み取る

要素名を指定してデータを取得する

# 要素「name」のデータを1つずつ取得
for name in root.iter('name'):
    print(name.text)

#[結果] サッカー
#[結果] 野球

ここではXMLの要素名を指定して取り出しました。要素名「name」のデータを取得します。

XMLのルートである「root」をroot.iter で要素名をパラメータとして1つずつ取り出しました。実際のデータ(コンテンツ)は text で取得できます。

配列でデータを取得する

# 配列でデータを1つずつ取得
print(root[0][0].text)
print(root[0][1].text)
print(root[1][0].text)
print(root[1][1].text)
#[結果] サッカー
#[結果] イングランド
#[結果] 野球
#[結果] アメリカ

先ほどは要素名を指定してデータを取り出しましたが、ここでは番号で取り出しました。

ルート変数「root」の配列番号で指定して取り出すことができます。「00」は1つ目のデータ、「01」が2つ目のデータという感じです。

PythonでXMLを書き込む

XMLデータを書き換える

# 要素「name」のデータを1つずつ取得
for name in root.iter('name'):
    if name.text == 'サッカー':
        name.text = 'フットボール'

# XMLファイル書き込み
tree.write('C:\pg\python\sports.xml', encoding='UTF-8')

書き換え後のsports.xml

<?xml version="1.0" encoding="UTF-8" ?>
<sports>
  <sport>
    <name>フットボール</name>
    <orgin>イングランド</orgin>
  </sport>
  <sport>
    <name>野球</name>
    <orgin>アメリカ</orgin>
  </sport>
</sports>

XMLデータの書き換えは、text を使います。

ここでは要素「name」のデータ「サッカー」を「フットボール」に変更しました。最後にツリーをwrite してXMLファイルへ書き込みします。

これで、XMLへデータを読み取り・書き込みすることができました。データの読み取り・書き込みはtextで行い、書き込みはwriteで行うのがポイントですね。

Pythonヘルプhttps://docs.python.jp/3/library/xml.etree.elementtree.html

以上、PythonでXMLを読み取り・書き込みする「xml.etree.ElementTree」モジュールの使い方でした。

コメント