Python
 Computer >> コンピューター >  >> プログラミング >> Python

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))

  1. PythonでのXML解析?

    Python XMLパーサーパーサーは、XMLファイルから有用な情報を読み取って抽出する最も簡単な方法の1つを提供します。この短いチュートリアルでは、Python ElementTree XML APIを使用してXMLファイルを解析し、XMLドキュメントを変更および作成する方法を説明します。 Python ElementTree APIは、XMLデータを抽出、解析、変換する最も簡単な方法の1つです。 それでは、ElementTreeを使用してPythonXMLパーサーの使用を開始しましょう。 例1 XMLファイルの作成 まず、要素とサブ要素を含む新しいXMLファイルを作成します。 #Im

  2. Pythonデバッガー(pdb)

    ソフトウェア開発の専門用語では、「デバッグ」という用語は、プログラム内のエラーを見つけて修正するプロセスに広く使用されています。 Pythonの標準ライブラリには、Pythonプログラムをデバッグするためのユーティリティのセットであるpdbモジュールが含まれています。 デバッグ機能はPdbクラスで定義されています。このモジュールは、内部でbdbモジュールとcmdモジュールを使用します。 pdbモジュールには、非常に便利なコマンドラインインターフェイスがあります。これは、Pythonスクリプトの実行時に–m switchを使用してインポートされます。 python –m pdb