Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में एलिमेंटट्री XML API (xml.etree.ElementTree)

एक्स्टेंसिबल मार्कअप लैंग्वेज (XML) HTML की तरह एक मार्कअप लैंग्वेज है। यह पोर्टेबल है और छोटी से मध्यम मात्रा में डेटा को किसी SQL डेटाबेस का उपयोग किए बिना संभालने के लिए उपयोगी है।

पायथन की स्टैंडर्ड लाइब्रेरी में xml पैकेज होता है। इस पैकेज में ElementTree मॉड्यूल होता है। यह एक सरल और हल्का XML प्रोसेसर API है।

XML एक ट्री-जैसी हायरार्किकल डेटा फॉर्मेट है। इस मॉड्यूल में 'ElementTree' पूरे XML डॉक्यूमेंट को एक ट्री के रूप में मानता है। 'Element' क्लास इस ट्री में एक सिंगल नोड को रिप्रेजेंट करती है। XML फ़ाइलों पर रीडिंग और राइटिंग ऑपरेशन ElementTree लेवल पर किए जाते हैं। एक सिंगल XML एलिमेंट और उसके सब-एलिमेंट्स के साथ इंटरैक्शन Element लेवल पर किया जाता है।

XML फ़ाइल बनाना

ट्री रूट से शुरू होकर अन्य एलिमेंट्स तक एलिमेंट्स की एक हायरार्किकल संरचना है। प्रत्येक एलिमेंट को इस मॉड्यूल के Element() फ़ंक्शन का उपयोग करके बनाया जाता है।

import xml.etree.ElementTree as et
e = et.Element('name')

प्रत्येक एलिमेंट एक टैग और attrib एट्रिब्यूट द्वारा विशेषता होती है जो एक डिक्ट ऑब्जेक्ट है। ट्री के शुरुआती एलिमेंट के लिए, attrib एक खाली डिक्शनरी है।

>>> root = xml.Element('employees')
>>> root.tag
'employees'
>>> root.attrib
{}

अब आप रूट एलिमेंट के तहत जोड़े जाने वाले एक या अधिक चाइल्ड एलिमेंट्स सेट कर सकते हैं। प्रत्येक चाइल्ड के एक या अधिक सब-एलिमेंट्स हो सकते हैं। उन्हें 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></employees>

XML फ़ाइल पार्स करना

आइए अब उपरोक्त उदाहरण में बनाई गई 'myfile.xml' को वापस पढ़ें। इस उद्देश्य के लिए ElementTree मॉड्यूल में निम्न फ़ंक्शन्स उपयोग किए जाएंगे:

ElementTree() यह फ़ंक्शन एलिमेंट्स की हायरार्किकल संरचना को ट्री ऑब्जेक्ट में पढ़ने के लिए ओवरलोडेड है।

tree = et.ElementTree(file='students.xml')

getroot() यह फ़ंक्शन ट्री का रूट एलिमेंट लौटाता है।

root = tree.getroot()

getchildren() यह फ़ंक्शन एक एलिमेंट से एक लेवल नीचे के सब-एलिमेंट्स की सूची लौटाता है।

children = root.getchildren()

निम्न उदाहरण में, 'myfile.xml' के एलिमेंट्स और सब-एलिमेंट्स को डिक्शनरी आइटम्स की सूची में पार्स किया जाता है।

import xml.etree.ElementTree as et

tree = et.ElementTree(file='employees.xml')
root = tree.getroot()
employees = []
children = root.getchildren()
for child in children:
    employee = {}
    pairs = child.getchildren()
    for pair in pairs:
        employee[pair.tag] = pair.text
    employees.append(employee)
print(employees)

आउटपुट

[{'name': 'aaa', 'age': '21', 'sal': '5000'}, {'name': 'xyz', 'age': '22', 'sal': '6000'}]

XML फ़ाइल संशोधित करना

हम Element के iter() फ़ंक्शन का उपयोग करेंगे। यह दिए गए टैग के लिए करंट एलिमेंट को रूट मानकर एक ट्री इटरेटर बनाता है। इटरेटर इस एलिमेंट और इसके नीचे के सभी एलिमेंट्स पर डॉक्यूमेंट (डेप्थ फर्स्ट) क्रम में पुनरावृति करता है।

आइए सभी 'marks' सब-एलिमेंट्स के लिए इटरेटर बनाएं और प्रत्येक 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. पायथन में सममित ट्री पायथन में सममित ट्री

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें जांचना है कि क्या ट्री एक सममित ट्री है या नहीं। एक ट्री को सममित कहा जाएगा यदि यह दर्पण छवि लेने पर समान हो। इन दो ट्री में, पहला सममित है, लेकिन दूसरा नहीं। हल करने के चरण हम निम्नलिखित चरणों को पुनरावर्ती रूप से कॉल करेंगे। फंक्शन solve(root, root) ह

  1. पायथन में XML पार्सिंग: ElementTree के साथ पायथन में XML पार्सिंग: ElementTree के साथ

    पायथन XML पार्सर XML फाइल से उपयोगी जानकारी पढ़ने और निकालने के सबसे आसान तरीकों में से एक प्रदान करता है। इस छोटे ट्यूटोरियल में हम देखेंगे कि कैसे हम पायथन ElementTree XML API का उपयोग करके XML फाइल को पार्स, संशोधित और बना सकते हैं। पायथन ElementTree API XML डेटा को निकालने, पार्स करने और ट्रांस

  1. पायथन डिबगर (pdb मॉड्यूल) पायथन डिबगर (pdb मॉड्यूल)

    सॉफ़्टवेयर डेवलपमेंट की शब्दावली में, डिबगिंग शब्द का उपयोग प्रोग्राम में त्रुटियों का पता लगाने और सुधारने की प्रक्रिया के लिए किया जाता है। पायथन की स्टैंडर्ड लाइब्रेरी में pdb मॉड्यूल होता है जो पायथन प्रोग्राम्स की डिबगिंग के लिए यूटिलिटीज़ का एक सेट है। डिबगिंग कार्यक्षमता Pdb क्लास में परिभाष