【Python】XMLファイルの読み込み書き込み

Pythonの応用
スポンサーリンク

Pythonでのファイルの操作をすでに扱いました。具体的なファイルフォーマットとしてはCSVファイルの作成、読み込み、書き込みを行いました。

【Python】CSVファイルの読み込み、書き込み
Pythonでのファイルの作成、操作について、ここではデータベースのデータの受け渡しなどでよく利用されるCSVファイルの作成と読み込み書き込みの操作をしてみます。リスト型から作るものと、フィールド名を使った辞書型から作るものとがあります。

Pythonには、他にも構造化されたテキストファイルはあります。データフィードのやり取りなどでよく利用されます。

ここではXMLファイルについて扱っていきます。

XMLは階層構造、シーケンス、集合などの構造をテキストで表すことができる方法です。データをHTML形式のようにタグを使ってデータを区切ることで表現します。

スポンサーリンク

XMLファイルの操作のためのサンプルの準備

XMLのデータの具体的なサンプルとして次の形のものを用意しました。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <fruits>
    <fruit>
      <name>apple</name>
      <price>100</price>
    </fruit>
    <fruit>
      <name>orange</name>
      <price>200</price>
    </fruit>
  </fruits>
</root>

このXMLファイルをPythonを使って作って行こうと思います。

スポンサーリンク

XMLの書き込み

上記に例として挙げたXMLフォーマットのファイルを作るPythonコードを書いてみましょう。

import xml.etree.ElementTree as et

root = et.Element('root')
tree = et.ElementTree(element=root)

fruits = et.SubElement(root, 'fruits')

fruit = et.SubElement(fruits, 'fruit')
fruit_id = et.SubElement(fruit, 'name')
fruit_id.text = 'apple'
fruit_id = et.SubElement(fruit, 'price')
fruit_id.text = '100'

fruit = et.SubElement(fruits, 'fruit')
fruit_id = et.SubElement(fruit, 'name')
fruit_id.text = 'orange'
fruit_id = et.SubElement(fruit, 'price')
fruit_id.text = '200'

tree.write('fruits.xml', encoding='utf-8', xml_declaration=True)

コードを上から見て行きましょう。

xmlモジュールをインポートしてetとします。

Elementでrootのタグを作り、ElementTreeでrootの中に項目を入れて行くようにします。

SubElementを使ってどのタグの下に入れ子構造で項目のタグを作っていくかを設定し、値を入れる部分にtextで書き込んでいます。

それぞれ、上のXMLの例と見比べると、どこで何をしているのかがわかると思います。開始のタグを最初に宣言し、その中にコンテンツのタグを続け、終了タグで閉めている形です。

最後に全体のtreeをwrite()を使って書き出すファイル名とエンコードを指定し、冒頭の宣言も合わせてファイルを作成しています。

このコードを実際に実行してみましょう。(ファイル名make_xml.pyとしてAtomで実行しています)

同じ作業ディレクトリ内に、指定したファイル名のfruits.xmlができています。それを開いて上記の右側に表示しています。横長で全てが見れませんが、ファイルの作成に成功しています。コードでencodingとdeclarationを宣言したので冒頭に表示もされています。

スポンサーリンク

XMLの読み込み

次はこのXMLファイルを読み込んで出力してみます。

コードを次のようになります。

import xml.etree.ElementTree as et

tree = et.ElementTree(file='fruits.xml')
root = tree.getroot()

for fruits in root:
    for fruit in fruits:
        for item in fruit:
            print(item.tag, ':', item.text)

書き込みと同様にモジュールを読み込みます。

ElementTreeでファイルを指定し、getrootでrootを得ます。

それをfor-inループで取り出して行きます。外側の要素から順にの要素を取り出すようにフープの中でループを回しています。

取り出した要素のタグの部分とテキストの部分に分けて出力しています。

これを実行してみましょう。

要素が取り出されて出力されているのがわかります。

以上、XMLの書き込みと読み込みをやってきました。最近はデータのやり取りにはJSON形式が多いのですが、古いシステムなどはXML形式であつかうものなどまだたくさんありますので、しっかり覚えておきましょう。

スポンサーリンク

まとめ

Pythonで扱うファイルフォーマットとしてXMLを扱いました。

書き込みと読み込みの方法を学んできましたが、書き込みは開始タグを宣言してそれに続けて、要素のタグを追加していき、最後に終了タグで閉める形をコードで書いていくことになります。

読み込みは、このファイルのタグをforループを組み合わせることで取り出しました。

XMLフォーマットでデータを扱うことはいまだに多いのですが、最近はJSONフォーマットがよく使われてきています。JSONは別でまた扱います。

Pythonの応用
スポンサーリンク
CodeGraffitiをフォローする

タイトルとURLをコピーしました