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レスポンスの構築など幅広く応用できます。ぜひこの記事を参考に、実践で活用してみてください。