Yapısal biçimlendirme verilerinin büyük bir dosyasını (> 5GB) ayrıştırmaya çalışıyorum. Veri formatı esasen XML'dir ancak açık bir kök öğesi yoktur. Bunu yapmanın en etkili yolu nedir?Python'da büyük sözde xml dosyalarını ayrıştırma
SAX ayrıştırıcılarıyla ilgili sorun, bir kök öğesi gerektirmesidir, bu nedenle ya veri akışına sahte bir öğe ekleyelim (Java'nın Python'da SequenceInputStream öğesine eşdeğer var mıdır?) Ya da SAX olmayan bir olaya dayalı çözümleyici (sgmllib'in bir varisi var mı?)
Verilerin yapısı oldukça basittir. elementlerin Temelde bir liste:
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
* aslında
xml.sax.parse
bir 'akış' nesne geçirebilmesi,
mi? Bu kodun bir müşterisi, sadece 'read()' yi kullandıysa EOF'u nasıl fark ederdi? –
Python'daki akış benzeri nesnelerin özelliklerinden biri, bir read() çağrısının en az bir baytı engelleyip döndürdüğü veya EOF olması durumunda boş dizge döndürdüğüdür. Orijinal dosya.read yöntemi böyle çalışır. – liori
Bunu PullDOM ile birlikte kullanmak isteyebilirsiniz - SAX'in akış doğasını DOM'ın hiyerarşik yapısıyla birleştirir. – RichieHindle