Python ile Dosya İşlemleri: XML Dosyalarının Okunması ve Yazılması

Python ile Dosya İşlemleri: XML Dosyalarının Okunması ve Yazılması

Python programlama diliyle XML dosyalarının nasıl okunup yazılacağını öğrenin Dosya işlemleri ile ilgili detaylı adımlar, örnek kodlar ve daha fazlası bu eğitimde Başlangıç seviyesindeki kullanıcılar için ideal!

Python ile Dosya İşlemleri: XML Dosyalarının Okunması ve Yazılması

Python programlama dilinin geniş kütüphane desteği ile birlikte dosya işlemleri oldukça kolay bir hale gelmiştir. Bu kapsamda XML dosyalarının okunması ve yazılması işlemleri de oldukça basittir. Bu makalede, Python dilinde XML dosyalarının nasıl okunacağı ve yazılacağı anlatılacaktır.

XML, verilerin düzenlenmesi, depolanması ve taşınması için kullanılan bir işaretleme dilidir. XML dosyalarının düzenli bir şekilde okunabilmesi ve manipüle edilebilmesi için Python'da bazı kütüphaneler kullanılmaktadır. Bunlar arasında xml.sax, ElementTree ve minidom bulunmaktadır.

  • xml.sax: XML verilerinin streaming şeklinde işlenmesi için kullanılır.
  • ElementTree: XML dosyalarının hiyerarşik şekilde işlenmesi ve erişilmesi için kullanılır. Element Access ve Attribute Access gibi yöntemlerle, dosyadaki belirli elementlere erişilebilir.
  • minidom: XML dosyalarının DOM (Document Object Model) yapısındaki temsilini oluşturmak için kullanılır.

Bu kütüphaneler yardımıyla, Python'da XML dosyalarının hem okunması hem de yazılması mümkündür. Okuma işlemi için lxml, ElementTree ve minidom, XML ağacının elde edilmesi için kullanılabilir. Oluşturulan XML ağacı, ElementTree veya minidom kütüphanesi kullanılarak yazdırılabilir ve bir XML dosyası elde edilebilir.


XML Nedir?

XML (Extensible Markup Language), verilerin düzenli bir şekilde depolanması, taşınması ve işlenmesi için kullanılan bir işaret dili veya metadilidir. Bu dili kullanarak, verileri bir dosyada depolamak, bir web sayfası veya uygulama aracılığıyla göndermek veya başka bir şekilde işlemek mümkündür. XML, HTML'in aksine, belge içeriğinden bağımsız olarak belgeleri tanımlar ve belgelere özel etiketler eklemeyi sağlar. XML, genişletilebilir bir yapıya sahip olduğu için, şirketler ve organizasyonlar tarafından kullanımı yaygındır.


Python'da XML İşleme Kütüphaneleri

Python programlama dili, XML dosyaları üzerinde işlemler yapmak için bir dizi kullanışlı kütüphane sağlar. Bu kütüphaneler arasında xml.sax, ElementTree ve minidom öne çıkar.

Kütüphane Açıklama
xml.sax XML verilerinin streaming şeklinde işlenmesi için kullanılır.
ElementTree XML dosyalarının hiyerarşik şekilde işlenmesi için kullanılır.
minidom XML dosyalarının DOM (Document Object Model) yapısındaki temsilini oluşturmak için kullanılır.

xml.sax kütüphanesi, XML verilerini parçalara ayırmak ve belirli bir öğe üzerinde işlem yapmak için idealdir. ElementTree, XML dosyalarını kolayca okumak ve değiştirmek için kullanılabilir. Ayrıca, bu kütüphane yardımıyla dosyanın belirli bir bölümüne erişebilir, özelliklerini değiştirebilir veya silinebilirsiniz. minidom kütüphanesi ise, XML verilerinin kararlı bir şekilde tutulmasını sağlayan bir diğer seçenektir.

Bu kütüphaneler, işletim sistemi hangi platformda çalışırsa çalışsın herhangi bir cihazda kullanılabilir. Böylece, XML dosyaları üzerinde işlem yapmak için hangi platformu veya işletim sistemini kullanırsanız kullanın, istediğiniz sonuca ulaşabilirsiniz.


xml.sax Kütüphanesi

Python ile XML işlemleri, Python dilinde bulunan XML işleme kütüphaneleri sayesinde oldukça kolay bir şekilde gerçekleştirilebilir. Bunlardan biri olan xml.sax kütüphanesi XML verilerinin streaming şeklinde işlenmesi için kullanılır.

Xml.sax kütüphanesi, XML verilerini parça parça okuyarak, her parçayı işleyebilir ve bu sayede RAM'de daha az yer kaplar. Bu kütüphane, bir XML dosyası okunurken parse edilmesi sırasında, dosyanın tamamını belleğe yüklemek yerine, dosyayı küçük parçalara böler ve yeterli olduğunda parçaları bellekten atar. Böylelikle, büyük XML dosyalarının okunabilmesine olanak sağlar.

Bir XML dosyasının okunması sırasında, xml.sax kütüphanesiyle birlikte bir ContentHandler sınıfı kullanmak gerekmektedir. Bu sınıf, XML verilerinin okunması sırasında belirtilen işlemlerin gerçekleştirilmesini sağlar. Ayrıca, xml.sax kütüphanesi, Namespace ve DTD gibi XML yapısını anlamak için gerekli olan öğeleri tanır ve doğru şekilde işler.

xml.sax kütüphanesi, XML verilerinin streaming şeklinde işlenmesi gerektiği durumlarda, ElementTree ve minidom gibi kütüphanelerden daha uygun bir çözüm olabilir.


ElementTree Kütüphanesi

Python'da XML dosyalarını okumak ve işlemek için kullanılabilecek kütüphaneler arasında ElementTree de bulunmaktadır. Bu kütüphane, XML dosyalarını hiyerarşik bir şekilde işleyebilmek için kullanılabilir. ElementTree, XML dosyasını bir ağaç yapısı olarak işleyerek, her bir elementin alt elemanlarına, özelliklerine ve metinlerine ulaşılmasını mümkün kılar.

ElementTree kütüphanesi, XML dosyasında belirli bir elemente ulaşmak için kullanılabilir. Bir elementin alt elemanlarına ve özelliklerine ulaşmak için ise farklı fonksiyonlar kullanılabilir. ElementTree ile XML dosyasındaki elementlerin sırası değiştirilebilir veya silinebilir, yeni elementler eklenip, özellikleri değiştirilebilir.

ElementTree kütüphanesi ile XML dosyasında birden fazla elementin bulunması mümkündür. Bu durumda, tüm elementler bir dizi şeklinde işlenir ve her bir elementin özellikleri ayrı ayrı erişilebilir. ElementTree kütüphanesi ile düzenli bir şekilde XML dosyaları işlenebilir ve verilerin okunması veya yazılması kolaylaştırılabilir.


Element Access

ElementTree kütüphanesi, XML dosyalarının hiyerarşik şekilde işlenmesi için kullanılır. Bu kütüphane sayesinde, XML dosyalarından belirli elementlere erişmek mümkün olmaktadır. ElementTree kütüphanesi, XML dosyasını ağaç yapısı şeklinde okur ve bu yapı üzerinden erişim sağlanır.

Bir XML dosyasındaki elementlere erişmek için, bilinen element adı kullanılabilir veya XPath ifadesi kullanılabilir. ElementTree kütüphanesi ile, belirli bir elementin altındaki tüm alt elementlerine veya belirli bir attribute'a sahip olan elementlere de erişilebilir.

Aşağıdaki örneklerde, ElementTree kütüphanesi kullanarak XML dosyasındaki belirli bir elemente erişim gösterilmiştir:

import xml.etree.ElementTree as ET# XML dosyası okunuyortree = ET.parse('ornek.xml')# root elementi seçiliyorroot = tree.getroot()# belirli bir elemente erişimfor child in root.iter('book'):    print(child.attrib)

Yukarıdaki örnekte, "book" elementine erişim sağlanmıştır. Ayrıca, belirtilen elementin özellikleri de yazdırılmıştır.

ElementTree kütüphanesi ile, XML dosyalardaki elementlere kolaylıkla erişim sağlanabilir. Bu da, XML dosyaları ile çalışma sürecinde büyük bir avantaj sağlamaktadır.


Attribute Access

XML dosyalarından belirli elementlerin özelliklerine (attribute) ulaşmak ve bu özellikleri değiştirmek, ElementTree kütüphanesi ile kolaylıkla gerçekleştirilebilir. Bunun için, öncelikle etiket adına erişmek gerekiyor. Daha sonra, ilgili özellik adı ile birlikte get() fonksiyonu kullanarak özelliğe erişilebilir. Örneğin;

XML Dosyası: Python Kodu:
<person name="John" age="30">  <email>john@example.com</email>  <phone>123456789</phone></person>      
import xml.etree.ElementTree as ETtree = ET.parse('sample.xml')root = tree.getroot()person = root.find('person')print(person.get('name')) # Johnperson.set('name', 'Michael')print(person.get('name')) # Michael      

Yukarıdaki örnekte, öncelikle 'sample.xml' dosyası ElementTree kütüphanesi ile parse edilmiştir. Daha sonra, 'person' etiketi bulunarak 'name' özelliğine erişim sağlanmış ve son olarak, 'set' fonksiyonu ile 'name' özelliği 'Michael' olarak değiştirilmiştir.


minidom Kütüphanesi

Python dilinde XML dosyalarının oluşturulması ve işlenmesi için kullanılan kütüphanelerden biri de minidom kütüphanesidir. Bu kütüphane, XML dosyalarını, DOM (Document Object Model) yapısındaki temsilini oluşturmak için kullanılır.

minidom kütüphanesi, XML verileri ile çalışırken, XML dosyalarını bir ağaç yapısı halinde modellemek için kullanılır. Bu yapı sayesinde, XML dosyasındaki veriler kolayca erişilebilir ve değiştirilebilir. Ayrıca, XML dosyalarının oluşturulması ve düzenlenmesi de minidom kütüphanesi kullanılarak gerçekleştirilebilir.

minidom kütüphanesi ile yapabileceğimiz işler arasında, XML dosyalarının düzenlenmesi, oluşturulması, bilgi ekleme ve çıkarma gibi temel işlemler yer almaktadır.

XML dosyalarını düzenlemek için minidom kütüphanesi kullanırken, aşağıdaki yöntemlerden bazıları kullanılabilir:

  • getElementsByTagName(): Belirli bir etiket adına sahip tüm elementleri döndürür.
  • getAttribute(): Bir elementin belirli bir özelliğine (attribute) erişmek için kullanılır.
  • getElementsByTagName(): Belirli bir etiket adına sahip tüm elementleri döndürür.
  • getElement(): Belirli bir elementin erişimi için kullanılır.

minidom kütüphanesi, diğer XML işleme kütüphaneleri kadar yaygın kullanılmamaktadır. Bunun nedeni, XML dosyalarının büyük hacimlerde çalışılması durumunda, işlemci kaynaklarını aşırı tüketmesidir. Ancak, küçük hacimli XML dosyaları için oldukça kullanışlı bir kütüphanedir.


XML Dosyalarının Okunması

XML dosyaları, verilerin depolanması ve taşınması için yaygın bir şekilde kullanılan yapısal veri biçimlerinden biridir. Python'da, lxml, ElementTree, minidom gibi kütüphaneler aracılığıyla, XML dosyalarının okunması oldukça kolaydır.

lxml: Bu kütüphane, yüksek performanslı bir XML işlemcisi olarak bilinir ve özellikle büyük XML dosyaları için idealdir.

ElementTree: Bu kütüphane, XML dosyalarının hiyerarşik olarak ele alınmasına izin verir. XML dosyası, ElementTree aracılığıyla bir ağaç yapısı olarak işlenir ve belirli elementlere erişmek için indeksleme kullanılabilir.

minidom: Bu kütüphane, XML dosyasının DOM (Document Object Model) yapısındaki temsilini oluşturmak için kullanılır. DOM, XML dosyasının bir ağaç yapısı olarak temsil edildiği bir dizi düğümden oluşur. Bu düğümlerin her biri, XML dosyasındaki bir elementi veya bir özelliği temsil eder.

XML dosyasını bir kütüphane kullanarak okumak için, öncelikle XML dosyasının adını ve yolunu belirlemek gerekir. Daha sonra, belirtilen kütüphane kullanılarak, dosya okunabilir ve istenilen elementlere erişilebilir.

Örneğin, ElementTree kütüphanesi kullanarak bir XML dosyası okumak için aşağıdaki kod parçasını kullanabilirsiniz:

import xml.etree.ElementTree as ETtree = ET.parse('ornek.xml')  # XML dosyasını açarroot = tree.getroot()  # Kök elementi alır# Tüm elementleri ve özelliklerini dolaşırfor child in root:    print(child.tag, child.attrib)

Bu kod parçası, ornek.xml dosyasını açar ve kök elementini alır. Daha sonra, root elementi üzerinde döngüye girerek, tüm alt elementlerin ve özelliklerin yazdırır. Bu şekilde, XML dosyasındaki tüm verilere erişilebilir.


XML Dosyalarının Yazılması

Python ile XML dosyalarının yazımı için ElementTree ve minidom kütüphaneleri kullanılabilir. Öncelikle, XML ağacını ve elementlerini oluşturmak gerekir. Bu işlem, önceki bölümlerde anlatıldığı gibi gerçekleştirilebilir.

ElementTree kütüphanesi, XML ağacını oluşturmak ve yazdırmak için kullanılır. Aşağıdaki örnek, ElementTree kütüphanesi kullanılarak basit bir XML dosyası oluşturmak için örnek kodu içermektedir:

import xml.etree.ElementTree as ETroot = ET.Element("root")doc = ET.SubElement(root, "doc")ET.SubElement(doc, "field1", name="blah").text = "some value1"ET.SubElement(doc, "field2", name="asdfasd").text = "some vlaue2"tree = ET.ElementTree(root)tree.write("filename.xml")

minidom kütüphanesi, oluşturulan XML ağacını veya HTML belgesini bir DOM yapısı olarak temsil eder. Aşağıdaki örnek, minidom kütüphanesi kullanılarak basit bir XML dosyası oluşturmak için örnek kodu içermektedir:

import xml.dom.minidomxml_doc = xml.dom.minidom.Document()root = xml_doc.createElement("root")xml_doc.appendChild(root)doc = xml_doc.createElement("doc")root.appendChild(doc)field1 = xml_doc.createElement("field1")field1.setAttribute("name", "blah")field1.appendChild(xml_doc.createTextNode("some value1"))doc.appendChild(field1)field2 = xml_doc.createElement("field2")field2.setAttribute("name", "asdfasd")field2.appendChild(xml_doc.createTextNode("some value2"))doc.appendChild(field2)print(xml_doc.toprettyxml())

Yukarıdaki kod, XML ağacını minidom yapısı olarak oluşturur ve bunu bir dosyaya veya çıktıya yazdırır. minidom kütüphanesi, mümkün olan en küçük boyutlu ve en hızlı ağaç oluşturur.