Friday 15 February 2013

Getting a memory error when parsing a large XML file in Python -


मेरी एक्सएमएल फाइल इस तरह दिखती है:

  & lt; root & gt; & Lt; समूह = "1" से, = "100" & gt; & Lt; link target = "1" / & gt; ... & lt; link target = "100" / & gt; & Lt; / समूह & gt; ... & lt; / root & gt;   

मेरे पास 6000 & lt; समूह & gt; तत्व और 5M & lt; लिंक & gt; तत्व हैं मुझे चाबी के रूप में और & lt; link & gt; s ' की एक सूची के रूप में tuple ( से , से ) एक शब्दकोश प्राप्त करना चाहते हैं लक्ष्य विशेषताओं, लेकिन मुझे निम्न कोड के साथ एक मेमोरी एरर मिलता है: ज़िप फ़ाइल आयात से लिपेल आयात एट्री से gopen def extractTargets के रूप में खुला

  फिन): लक्ष्य के साथ = (एक्स) के रूप में गोपीन (फिन): उदाहरण के लिए संदर्भ = etree.iterparse (xml, टैग = "समूह"), संदर्भ में elem: लक्ष्य [(elem.get ("से"), elem ("से"))] = elem.xpath ("link / @ target") elem.clear () जबकि elem.getprevious () कोई नहीं है: del elem.getparent () [0] del context    

निम्न कोड का प्रयास करें:

lxml.etree
  आयात करें lxml.etree से gopen वर्ग GroupDictTarget (ऑब्जेक्ट) के रूप में खुला: def __init __ (स्वयं, डी): self.d = डी डीईफ़ शुरू (स्वयं, टैग, attrib): अगर टैग == 'समूह' : Self.group = self.d [attrib ['से'], एट्रिब ['से']] = [] एलीफ़ टैग == 'लिंक': self.group.append (attrib [' लक्ष्य ']) def बंद (आत्म): पास def extractTargets (पंख): गोपीन के साथ (फिन) के रूप में xml: लक्ष्य = {} पार्सर = lxml.etree.XMLParser (लक्ष्य = GroupDictTarget (लक्ष्य)) lxml.etree.parse ( Xml.parsers.expat आयात करें xml.parsers.expat gzip आयात से gopen वर्ग GroupDictTarget (ऑब्जेक्ट) के रूप में खुला:   

xml.parsers.expat # डीफ एक्सट्रैक्ट लक्ष्य (फिन) के रूप में भी: लक्ष्य = {} p = xml.parsers.expat.ParserCreate () पी। स्टार्ट एलेमेंटहैंडलर = समूहडिक्टटैग्रेड (लक्ष्य)। Gopen (फिन) के साथ प्रारंभ करें f: p.ParseFile (f) रिटर्न Gopen वर्ग GroupDictTarget (ऑब्जेक्ट) के रूप में खुला gzip आयात से xml.sax आयात xml.sax

xml.sax

#: DEF extractTargets (पंख) : लक्ष्य = {} हैंडलर = xml.sax.handler.ContentHandler () हैंडलर। प्रारंभआवेदन = समूहडिक्टटैग (लक्ष्य)। Gopen (फ़िन) के साथ f: xml.sax.parse (f, हैंडलर) रिटर्न लक्ष्य

No comments:

Post a Comment