Rumah pembangunan bahagian belakang Tutorial Python Petua untuk memproses fail XML yang besar menggunakan Python

Petua untuk memproses fail XML yang besar menggunakan Python

Aug 09, 2023 pm 12:01 PM
pengurusan ingatan penghurai pemprosesan selari

Petua untuk memproses fail XML yang besar menggunakan Python

Petua untuk memproses fail XML yang besar menggunakan Python

Dalam persekitaran pemprosesan data moden, fail XML yang besar selalunya merupakan sumber data biasa. Walau bagaimanapun, disebabkan struktur yang kompleks dan saiz fail XML yang besar, memprosesnya secara langsung mungkin menghadapi beberapa cabaran. Artikel ini akan memperkenalkan beberapa teknik untuk menggunakan Python untuk memproses fail XML yang besar untuk membantu kami mengekstrak data daripadanya dengan cekap.

  1. Gunakan penghurai SAX
    SAX (API Mudah untuk XML) ialah penghurai XML dipacu peristiwa yang boleh membaca fail XML baris demi baris dan memproses nod di dalamnya. Berbanding dengan parser DOM, parser SAX lebih cekap apabila memproses fail XML yang besar kerana ia tidak perlu memuatkan keseluruhan fail ke dalam memori. Modul xml.sax terbina dalam Python menyediakan pelaksanaan penghurai SAX.

Berikut ialah contoh kod yang menunjukkan cara menggunakan penghurai SAX untuk menghuraikan fail XML yang besar dan mengekstrak data di dalamnya:

import xml.sax

class MyHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.data = ""

    def startElement(self, tag, attributes):
        if tag == "item":
            self.data = ""

    def endElement(self, tag):
        if tag == "item":
            print(self.data)

    def characters(self, content):
        self.data += content.strip()

parser = xml.sax.make_parser()
handler = MyHandler()
parser.setContentHandler(handler)
parser.parse("large.xml")
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kelas ContentHandler tersuai dengan mengatasi startElement, endElement dan kaedah aksara untuk mengendalikan nod XML. Apabila penghurai menemui teg <item>, ia memanggil kaedah startElement, di mana kita memulakan self.data. Apabila penghurai menemui teg </item>, ia memanggil kaedah endElement, di mana kami mencetak nilai self.data. Apabila penghurai membaca kandungan aksara, kaedah aksara dipanggil, di mana kami menambah kandungan aksara semasa pada self.data. <item>标签时,会调用startElement方法,我们在其中对self.data进行初始化。当解析器遇到</item>标签时,会调用endElement方法,我们在其中打印出self.data的值。当解析器读取到字符内容时,会调用characters方法,我们在其中将当前字符内容添加到self.data中。

  1. 使用XPath进行数据筛选
    XPath是一种用于在XML文档中定位节点的语言,它提供了丰富的查询语法。在处理大型XML文件时,我们可以利用XPath来筛选出需要的数据,避免处理整个文件。Python的lxml库提供了对XPath的支持。

以下是一个使用lxml和XPath提取大型XML文件中数据的示例代码:

from lxml import etree

tree = etree.parse("large.xml")
items = tree.xpath("//item")
for item in items:
    print(item.text)
Salin selepas log masuk

在上述代码中,我们使用etree.parse函数将XML文件加载到内存中,并使用tree.xpath方法传入XPath表达式//item来获取所有<item>节点。然后我们遍历这些节点,并打印出其文本内容。

  1. 使用迭代器和生成器
    为了避免一次性将整个大型XML文件加载到内存中,我们可以使用迭代器和生成器来逐行读取和处理XML文件。Python的xml.etree.ElementTree模块提供了ElementTree.iterparse方法,可以使用迭代器的方式遍历XML文件的节点。

以下是一个使用迭代器和生成器处理大型XML文件的示例代码:

import xml.etree.ElementTree as ET

def iterparse_large_xml(file_path):
    xml_iterator = ET.iterparse(file_path, events=("start", "end"))
    _, root = next(xml_iterator)
    for event, elem in xml_iterator:
        if event == "end" and elem.tag == "item":
            yield elem.text
            root.clear()

for data in iterparse_large_xml("large.xml"):
    print(data)
Salin selepas log masuk

在上述代码中,我们定义了一个iterparse_large_xml函数,它接受一个文件路径作为参数。函数内部使用ET.iterparse方法创建一个XML迭代器,并通过next方法获取迭代器的第一个元素,即根节点。然后通过遍历迭代器的方式逐行读取XML文件中的节点,当遇到

    Gunakan XPath untuk penapisan data

    XPath ialah bahasa untuk mencari nod dalam dokumen XML dan ia menyediakan sintaks pertanyaan yang kaya. Apabila memproses fail XML yang besar, kami boleh menggunakan XPath untuk menapis data yang diperlukan dan mengelakkan pemprosesan keseluruhan fail. Pustaka lxml Python menyediakan sokongan untuk XPath.

    🎜🎜Berikut ialah contoh kod untuk mengekstrak data daripada fail XML yang besar menggunakan lxml dan ekspresi XPath //item untuk mendapatkan semua nod <item></item>. Kami kemudian melelang melalui nod ini dan mencetak kandungan teksnya. 🎜
      🎜Gunakan Iterator dan Penjana🎜Untuk mengelakkan memuatkan keseluruhan fail XML besar ke dalam ingatan sekaligus, kami boleh menggunakan iterator dan penjana untuk membaca dan memproses fail XML baris demi baris. Modul xml.etree.ElementTree Python menyediakan kaedah ElementTree.iterparse, yang boleh menggunakan iterator untuk melintasi nod fail XML. 🎜🎜🎜Berikut ialah contoh kod untuk memproses fail XML yang besar menggunakan iterator dan penjana: 🎜rrreee🎜Dalam kod di atas, kami telah menentukan fungsi iterparse_large_xml yang menerima laluan fail sebagai parameter. Di dalam fungsi, kaedah ET.iterparse digunakan untuk mencipta lelaran XML, dan kaedah seterusnya digunakan untuk mendapatkan elemen pertama lelaran, iaitu nod akar. Kemudian nod dalam fail XML dibaca baris demi baris dengan melintasi iterator Apabila teg ditemui, pernyataan hasil digunakan untuk mengembalikan kandungan teks nod. Kemudian gunakan root.clear() untuk mengosongkan elemen anak nod akar untuk mengosongkan ingatan. 🎜🎜Dengan teknik yang diperkenalkan di atas, kami boleh menggunakan Python untuk memproses fail XML yang besar dengan cekap dan mengekstrak data yang diperlukan daripadanya. Sama ada anda menggunakan penghurai SAX, ungkapan XPath atau iterator dan penjana, anda boleh memilih kaedah yang sesuai untuk memproses fail XML mengikut situasi sebenar untuk meningkatkan kecekapan pemprosesan data. 🎜

Atas ialah kandungan terperinci Petua untuk memproses fail XML yang besar menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara mengendalikan membaca dan menulis sejumlah besar data dalam pembangunan bahasa Go Cara mengendalikan membaca dan menulis sejumlah besar data dalam pembangunan bahasa Go Jul 02, 2023 pm 10:09 PM

Bahasa Go ialah bahasa pengaturcaraan yang cekap dan ringkas yang digunakan secara meluas dalam bidang pemprosesan data besar. Dalam pembangunan, memproses operasi baca dan tulis sejumlah besar data adalah tugas yang sangat kritikal. Artikel ini akan memperkenalkan beberapa pengalaman praktikal dan amalan terbaik dalam mengendalikan sejumlah besar operasi baca dan tulis data dalam pembangunan bahasa Go. 1. Gunakan penimbal Apabila memproses sejumlah besar operasi baca dan tulis data, menggunakan penimbal ialah kaedah pengoptimuman yang biasa. Dengan menulis data ke penimbal terlebih dahulu dan bukannya menulisnya terus ke fail atau pangkalan data, anda boleh mengurangkan tekanan I/O cakera atau rangkaian. Bahasa Go menyediakan b

Kesukaran teknikal dan penyelesaian dalam pembangunan projek bahasa Go Kesukaran teknikal dan penyelesaian dalam pembangunan projek bahasa Go Nov 02, 2023 pm 06:51 PM

Kesukaran Teknikal dan Penyelesaian dalam Pembangunan Projek Bahasa Go Dengan popularisasi Internet dan pembangunan pemformatan, pembangunan projek perisian telah mendapat perhatian yang lebih dan lebih. Di antara banyak bahasa pengaturcaraan, bahasa Go telah menjadi pilihan pertama banyak pembangun kerana prestasinya yang berkuasa, keupayaan konkurensi yang cekap dan sintaks yang mudah dan mudah dipelajari. Walau bagaimanapun, masih terdapat beberapa kesukaran teknikal dalam pembangunan projek bahasa Go Artikel ini akan meneroka kesukaran ini dan menyediakan penyelesaian yang sepadan. 1. Kawalan konkurensi dan keadaan perlumbaan Model konkurensi bahasa Go dipanggil "goroutine", yang menjadikan

Analisis dan penyelesaian untuk menimbun dan menyusun masalah dalam C++ Analisis dan penyelesaian untuk menimbun dan menyusun masalah dalam C++ Oct 09, 2023 pm 12:09 PM

Analisis dan penyelesaian kepada masalah timbunan dan timbunan dalam C++ Dalam pengaturcaraan C++, timbunan dan timbunan ialah dua kaedah pengurusan ingatan yang biasa digunakan. Timbunan digunakan untuk memperuntukkan memori secara dinamik, manakala timbunan digunakan untuk menyimpan pembolehubah tempatan dan maklumat konteks untuk panggilan fungsi. Walau bagaimanapun, penggunaan timbunan dan timbunan yang salah boleh menyebabkan kebocoran memori, segfault dan tingkah laku yang tidak dapat diramalkan. Oleh itu, apabila menulis kod C++, anda perlu menganalisis masalah dengan teliti dan menggunakan penyelesaian yang sepadan. 1. Analisis masalah biasa Berikut adalah situasi biasa dan analisis masalah timbunan dan tindanan dalam C++: Kebocoran memori: apabila menghantar kata kunci baharu

Analisis mendalam tentang pengumpulan sampah dan pengurusan ingatan dalam bahasa Go Analisis mendalam tentang pengumpulan sampah dan pengurusan ingatan dalam bahasa Go Sep 27, 2023 am 11:27 AM

Analisis mendalam tentang pengumpulan sampah dan pengurusan ingatan dalam bahasa Go 1. Pengenalan Dengan perkembangan teknologi, keperluan pembangunan perisian telah menjadi semakin kompleks, dan prestasi dan kecekapan program juga telah menjadi tumpuan pembangun. Untuk bahasa pengaturcaraan, pengumpulan sampah yang cekap dan pengurusan memori adalah kunci untuk memastikan prestasi program yang stabil. Sebagai bahasa pengaturcaraan sumber terbuka, bahasa Go popular di kalangan banyak pembangun kerana kesederhanaan, kecekapan dan keselarasannya. Artikel ini akan memberikan analisis mendalam tentang pengumpulan sampah dan mekanisme pengurusan memori dalam bahasa Go, dan menerangkannya melalui contoh kod tertentu.

Petua untuk memproses fail XML yang besar menggunakan Python Petua untuk memproses fail XML yang besar menggunakan Python Aug 09, 2023 pm 12:01 PM

Petua untuk menggunakan Python untuk memproses fail XML yang besar Dalam persekitaran pemprosesan data moden, fail XML yang besar selalunya merupakan sumber data biasa. Walau bagaimanapun, disebabkan struktur yang kompleks dan saiz fail XML yang besar, memprosesnya secara langsung mungkin menghadapi beberapa cabaran. Artikel ini akan memperkenalkan beberapa teknik untuk menggunakan Python untuk memproses fail XML yang besar untuk membantu kami mengekstrak data daripadanya dengan cekap. Menggunakan penghurai SAX SAX (SimpleAPI untuk XML) ialah penghurai XML dipacu peristiwa yang boleh

Petua dan kiat lanjutan untuk menghuraikan dan memproses HTML/XML dalam PHP Petua dan kiat lanjutan untuk menghuraikan dan memproses HTML/XML dalam PHP Sep 10, 2023 am 08:19 AM

PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas yang sering digunakan untuk menghuraikan dan memproses fail HTML dan XML. Dalam pembangunan harian, menguasai beberapa teknik dan teknik lanjutan boleh membantu pembangun menyelesaikan tugas dengan lebih cekap. Artikel ini akan memperkenalkan beberapa petua dan helah lanjutan yang biasa digunakan semasa menghuraikan dan memproses HTML/XML dalam PHP. 1. Gunakan kelas DOMDocument untuk menghuraikan HTML/XML Kelas DOMDocument ialah penghurai berkuasa yang disediakan oleh PHP untuk menghurai dan memproses XML dan H

Kemahiran pengaturcaraan C++ praktikal: beberapa perkara utama untuk meningkatkan prestasi aplikasi Kemahiran pengaturcaraan C++ praktikal: beberapa perkara utama untuk meningkatkan prestasi aplikasi Nov 27, 2023 am 11:13 AM

Dengan pembangunan berterusan aplikasi komputer, keperluan untuk prestasi program menjadi lebih tinggi dan lebih tinggi. Sebagai bahasa pengaturcaraan yang berkuasa dan fleksibel, C++ boleh mengoptimumkan prestasi program dan meningkatkan kelajuan dan kecekapan tindak balas aplikasi melalui beberapa teknik. Artikel ini akan memperkenalkan beberapa teknik pengaturcaraan C++ praktikal untuk membantu pembangun meningkatkan prestasi aplikasi. Pertama, gunakan pengurusan memori secara rasional. Dalam C++, peruntukan dan pelepasan memori dinamik adalah proses yang sangat penting. Pengurusan memori yang salah atau tidak munasabah selalunya membawa kepada kebocoran memori, pemecahan memori dan kemerosotan prestasi. Optimumkan ingatan

Analisis dan penyelesaian kepada masalah pengoptimuman kod dalam C++ Analisis dan penyelesaian kepada masalah pengoptimuman kod dalam C++ Oct 09, 2023 pm 08:04 PM

Analisis dan penyelesaian kepada masalah pengoptimuman kod dalam C++ Ringkasan: Apabila membangunkan program C++, kita sering perlu memberi perhatian kepada pengoptimuman prestasi kod. Artikel ini akan memperkenalkan beberapa masalah pengoptimuman kod biasa dan menyediakan penyelesaian yang sepadan serta contoh kod khusus, bertujuan untuk membantu pembaca meningkatkan kecekapan pelaksanaan program C++. Isu pengurusan memori Pengurusan memori adalah aspek penting dalam pengoptimuman kod. Beberapa masalah pengurusan memori biasa termasuk kebocoran memori, pemecahan memori, dan peruntukan memori yang kerap dan deallocation. Berikut adalah beberapa penyelesaian: 1.1 Gunakan pintar

See all articles