PythonのElementTreeXMLAPI
Extensible Markup Language(XML)は、HTMLによく似たマークアップ言語です。ポータブルであり、SQLデータベースを使用せずに少量から中量のデータを処理するのに役立ちます。
Pythonの標準ライブラリにはxmlパッケージが含まれています。このパッケージにはElementTreeモジュールが含まれています。これはシンプルで軽量なXMLプロセッサAPIです。
XMLは、階層データ形式のようなツリーです。このモジュールの「ElementTree」は、XMLドキュメント全体をツリーとして扱います。 'Element'クラスは、このツリーの単一ノードを表します。 XMLファイルの読み取りおよび書き込み操作は、ElementTreeレベルで実行されます。単一のXML要素とそのサブ要素との相互作用は、要素レベルで行われます。
XMLファイルを作成するには
ツリーは、ルートで始まり、他の要素が続く要素の階層構造です。各要素は、このモジュールのElement()関数を使用して作成されます。
import xml.etree.ElementTree as et e=et.Element('name')
各要素は、dictオブジェクトであるタグと属性によって特徴付けられます。ツリーの開始要素の場合、attribは空の辞書です
>>> root=xml.Element('employees') >>> root.tag 'emploees' >>> root.attrib {}
これで、ルート要素の下に追加する1つ以上の子要素を設定できます。各子には、1つ以上のサブ要素があります。 Subelement()関数を使用してそれらを追加し、そのテキスト属性を定義します。
child=xml.Element("employee") nm = xml.SubElement(child, "name") nm.text = student.get('name') age = xml.SubElement(child, "salary") age.text = str(student.get('salary'))
各子は、append()関数によってルートに追加されます
root.append(child)
必要な数の子要素を追加した後、elementTree()関数でツリーオブジェクトを作成します
tree = et.ElementTree(root)
ツリー構造全体は、ツリーオブジェクトのwrite()関数によってバイナリファイルに書き込まれます
f = open('employees.xml', "wb") tree.write(f)
次の例では、辞書アイテムのリストからツリーが構築されています。各辞書項目は、学生のデータ構造を説明するキーと値のペアを保持します。そのように構築されたツリーは「myfile.xml」に書き込まれます
import xml.etree.ElementTree as et employees=[{'name':'aaa','age':21,'sal':5000},{'name':xyz,'age':22,'sal':6000}] root = et.Element("employees") for employee in employees: child=xml.Element("employee") root.append(child) nm = xml.SubElement(child, "name") nm.text = student.get('name') age = xml.SubElement(child, "age") age.text = str(student.get('age')) sal=xml.SubElement(child, "sal") sal.text=str(student.get('sal')) tree = et.ElementTree(root) with open('employees.xml', "wb") as fh: tree.write(fh)
'myfile.xml'は現在の作業ディレクトリに保存されています。
<employees><employee><name>aaa</name><age>21</age><sal>5000</sal></employee><employee><name>xyz</name><age>22</age><sal>60</sal></employee></employee>
XMLファイルを解析するには
上記の例で作成した「myfile.xml」を読み返してみましょう。この目的のために、ElementTreeモジュールの次の関数が使用されます
ElementTree() この関数は、要素の階層構造をツリーオブジェクトに読み取るためにオーバーロードされます。
tree = et.ElementTree(file='students.xml')
getroot() この関数はツリーのルート要素を返します
root = tree.getroot()
getchildren() この関数は、要素の1レベル下のサブ要素のリストを返します。
children = root.getchildren()
次の例では、「myfile.xml」の要素とサブ要素が解析されて辞書アイテムのリストになります。
import xml.etree.ElementTree as et tree = et.ElementTree(file='employees.xml') root = tree.getroot() students = [] children = root.getchildren() for child in children: employee={} pairs = child.getchildren() for pair in pairs: employee[pair.tag]=pair.text employees.append(student) print (employees)
出力
[{'name': 'aaa', 'age': '21', 'sal': '5000'}, {'name': 'xyz', 'age': '22', 'sal': '6000'}]
XMLファイルを変更するには
Elementのiter()関数を使用します。現在の要素をルートとして、指定されたタグのツリーイテレータを作成します。イテレータは、この要素とその下のすべての要素をドキュメント(深さ優先)の順序で繰り返します。
すべての「マーク」サブ要素のイテレータを作成し、各salタグのテキストを100ずつ増やしましょう。
import xml.etree.ElementTree as et tree = et.ElementTree(file='students.xml') root = tree.getroot() for x in root.iter('sal'): s = int (x.text) s = s+100 x.text=str(s) with open("employees.xml", "wb") as fh: tree.write(fh)
'employees.xml'はそれに応じて変更されます。
set()を使用して、特定のキーの値を更新することもできます。
x.set(marks, str(mark))
-
PythonでのXML解析?
Python XMLパーサーパーサーは、XMLファイルから有用な情報を読み取って抽出する最も簡単な方法の1つを提供します。この短いチュートリアルでは、Python ElementTree XML APIを使用してXMLファイルを解析し、XMLドキュメントを変更および作成する方法を説明します。 Python ElementTree APIは、XMLデータを抽出、解析、変換する最も簡単な方法の1つです。 それでは、ElementTreeを使用してPythonXMLパーサーの使用を開始しましょう。 例1 XMLファイルの作成 まず、要素とサブ要素を含む新しいXMLファイルを作成します。 #Im
-
Pythonデバッガー(pdb)
ソフトウェア開発の専門用語では、「デバッグ」という用語は、プログラム内のエラーを見つけて修正するプロセスに広く使用されています。 Pythonの標準ライブラリには、Pythonプログラムをデバッグするためのユーティリティのセットであるpdbモジュールが含まれています。 デバッグ機能はPdbクラスで定義されています。このモジュールは、内部でbdbモジュールとcmdモジュールを使用します。 pdbモジュールには、非常に便利なコマンドラインインターフェイスがあります。これは、Pythonスクリプトの実行時に–m switchを使用してインポートされます。 python –m pdb