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パターンあります。
- XMLファイル
- 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」モジュールの使い方でした。
コメント