मैं वर्तमान में अजगर कुकबुक के अध्याय 12.5 के आधार पर निम्न कोड हूँ:पायथन में बड़े एक्सएमएल दस्तावेज़ों का विश्लेषण करने का सबसे तेज़ तरीका क्या है?
from xml.parsers import expat
class Element(object):
def __init__(self, name, attributes):
self.name = name
self.attributes = attributes
self.cdata = ''
self.children = []
def addChild(self, element):
self.children.append(element)
def getAttribute(self,key):
return self.attributes.get(key)
def getData(self):
return self.cdata
def getElements(self, name=''):
if name:
return [c for c in self.children if c.name == name]
else:
return list(self.children)
class Xml2Obj(object):
def __init__(self):
self.root = None
self.nodeStack = []
def StartElement(self, name, attributes):
element = Element(name.encode(), attributes)
if self.nodeStack:
parent = self.nodeStack[-1]
parent.addChild(element)
else:
self.root = element
self.nodeStack.append(element)
def EndElement(self, name):
self.nodeStack.pop()
def CharacterData(self,data):
if data.strip():
data = data.encode()
element = self.nodeStack[-1]
element.cdata += data
def Parse(self, filename):
Parser = expat.ParserCreate()
Parser.StartElementHandler = self.StartElement
Parser.EndElementHandler = self.EndElement
Parser.CharacterDataHandler = self.CharacterData
ParserStatus = Parser.Parse(open(filename).read(),1)
return self.root
मैं आकार में 1 जीबी के बारे में एक्सएमएल डॉक्स के साथ काम कर रहा हूँ। क्या किसी को इन्हें पार्स करने का एक तेज़ तरीका पता है?
आपका प्रश्न बहुत किसी भी उपयोगी जवाब बटोरने के लिए अस्पष्ट है। इन सवालों के जवाब देने पर विचार करें: - आप इस 1 जीबी एक्सएमएल दस्तावेज़ के साथ क्या करने की कोशिश कर रहे हैं? - आपको इस पार्सर को कितनी तेजी से आवश्यकता है? - क्या आप आसानी से दस्तावेज के माध्यम से स्मृति में सबकुछ लोड करने की बजाय स्मृति को फिर से भर सकते हैं? – Matt
मुझे इसे सब मेमोरी में लोड करने, डेटा को इंडेक्स करने और फिर 'ब्राउज' करने और इसे संसाधित करने की आवश्यकता है। –