Python|XMLファイルを書き込む

1. はじめに

Pythonを使ってデータをファイルに保存する方法のひとつに「XMLファイルへの書き込み」があります。
本記事では、PythonでXMLファイルを書き込む方法について、初心者にもわかりやすく解説します。

XML(Extensible Markup Language)は、データを構造的に保存・交換するための汎用フォーマットで、システム間のデータ連携や設定ファイルとして広く使われています。Pythonでは標準ライブラリの xml.etree.ElementTree を使うことで、簡単にXMLファイルを作成・出力できます。

この記事を読むことで、次のようなことができるようになります:

– PythonでXMLファイルを新規作成する方法
– ノードや属性を自由に追加して構造化データを出力する方法
– 応用的なXMLの書き方とエラー回避策

 

2. PythonでXMLファイルを書き込む基本構文

2-1. ElementTreeモジュールの概要

PythonでXMLを扱うには、標準ライブラリの xml.etree.ElementTree モジュールを使用します。
このモジュールを使うと、ツリー構造を直感的に作成でき、ファイルへの保存も簡単です。

2-2. シンプルなXMLファイルの書き込み例

import xml.etree.ElementTree as ET

# ルート要素の作成
root = ET.Element("books")

# 子要素の追加
book1 = ET.SubElement(root, "book")
book1.set("id", "1")
title1 = ET.SubElement(book1, "title")
title1.text = "Python入門"
author1 = ET.SubElement(book1, "author")
author1.text = "山田太郎"

# ツリーの作成とファイルへの書き込み
tree = ET.ElementTree(root)
tree.write("books.xml", encoding="utf-8", xml_declaration=True)

実行結果:

<?xml version='1.0' encoding='utf-8'?>
<books>
  <book id="1">
    <title>Python入門</title>
    <author>山田太郎</author>
  </book>
</books>

 

3. PythonでXMLを書き込む応用例と実務活用

3-1. 複数ノードをループで書き込む

import xml.etree.ElementTree as ET

# データの用意
book_list = [
    {"id": "1", "title": "Python入門", "author": "山田太郎"},
    {"id": "2", "title": "Python応用", "author": "佐藤花子"},
    {"id": "3", "title": "PythonとAI", "author": "中村健一"},
]

# ルート要素の作成
root = ET.Element("books")

# データをループして書き込む
for book in book_list:
    book_elem = ET.SubElement(root, "book", id=book["id"])
    ET.SubElement(book_elem, "title").text = book["title"]
    ET.SubElement(book_elem, "author").text = book["author"]

# ファイルに保存
tree = ET.ElementTree(root)
tree.write("books_multi.xml", encoding="utf-8", xml_declaration=True)

実行結果:

<?xml version='1.0' encoding='utf-8'?>
<books>
  <book id="1">
    <title>Python入門</title>
    <author>山田太郎</author>
  </book>
  <book id="2">
    <title>Python応用</title>
    <author>佐藤花子</author>
  </book>
  <book id="3">
    <title>PythonとAI</title>
    <author>中村健一</author>
  </book>
</books>

3-2. Pretty Print(整形表示)する

tree.write() だけではインデントがつきません。読みやすい形式で出力するには、minidom を使います。

from xml.dom import minidom
import xml.etree.ElementTree as ET

def prettify(elem):
    rough_string = ET.tostring(elem, encoding="utf-8")
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ")

# データの作成
root = ET.Element("data")
item = ET.SubElement(root, "item")
item.set("key", "value")
item.text = "内容"

# 整形したXMLを保存
pretty_xml = prettify(root)
with open("pretty.xml", "w", encoding="utf-8") as f:
    f.write(pretty_xml)

実行結果:

<?xml version="1.0" ?>
<data>
  <item key="value">内容</item>
</data>

 

4. PythonでXMLを書き込む際の注意点・エラー対策

4-1. 文字化けに注意(エンコーディング)

日本語を含むXMLを書き込む場合は、必ず encoding="utf-8" を指定しましょう。
指定しないとデフォルトがASCIIとなり、文字化けやエラーが発生することがあります。

4-2. 属性とテキストの使い分け

– 属性(attribute)はタグの情報として
例:<book id="1">
– テキスト(text)はタグの中身として使用
例:<title>Python入門</title>

混同しやすいため、用途に応じて適切に使い分けましょう。

4-3. タグ構造ミスに注意

SubElement() の親子構造を正しく指定しないと、意図しないXMLが生成されます。
特にループやネストが深いときは注意しましょう。

4-4. ファイルパスの指定

ファイル出力先のパスが存在しない場合、FileNotFoundError が発生します。
os.makedirs() などで事前にディレクトリを作成しておくと安心です。

 

5. まとめ

この記事では、PythonでXMLファイルを書き込む方法を初心者向けに解説しました。

✅ ElementTreeで直感的に構造を作れる
✅ 属性やテキストを自由に組み合わせられる
✅ 複数要素もループで簡単に記述可能
✅ Pretty Printや出力時の注意点もカバー

XMLはシステム連携や設定ファイルなど、実務でも使用頻度が高いフォーマットです。
Pythonでの書き込みを習得すれば、自動レポート生成、設定ファイル出力、APIレスポンスの構築など幅広く応用できます。ぜひこの記事を参考に、実践で活用してみてください。

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