मैं संरचित मार्कअप डेटा की एक बड़ी फ़ाइल (> 2 जीबी) पार्स करने की कोशिश कर रहा हूं और इसके लिए स्मृति पर्याप्त नहीं है। इस स्थिति के लिए एक्सएमएल पार्सिंग क्लास का इष्टतम तरीका कौन सा है। अधिक जानकारी कृपया।क्या पाइथन xml ElementTree एक बहुत बड़ी एक्सएमएल फ़ाइल पार्स कर सकते हैं?
उत्तर
अधिकांश डोम पुस्तकालय - जैसे ElementTree - कोर में संपूर्ण दस्तावेज़ मॉडल बनाएं। परंपरागत रूप से, जब आपका मॉडल एक बार में स्मृति में फिट होने के लिए बहुत बड़ा होता है, तो आपको xml.sax जैसे अधिक स्ट्रीम-ओरिएंटेड पार्सर का उपयोग करने की आवश्यकता होती है।
यह अक्सर अपेक्षाकृत कठिन होता है कि यह होना चाहिए, विशेष रूप से जब पूरे डोम से निपटने जैसे उच्च-आदेश संचालन के लिए उपयोग किया जाता है।
क्या यह संभव है कि अपने xml दस्तावेज़ बल्कि सरल है की तरह
<entries>
<entry>...</entry>
<entry>...</entry>
</entries>
जो आप एक अधिक ElementTree मैत्रीपूर्ण ढंग से डेटा के सबसेट पर काम करने की अनुमति होगी?
केवल API मैंने देखा है कि सभी पर बात की इस तरह संभाल कर सकते हैं pulldom है:
http://docs.python.org/library/xml.dom.pulldom.html
Pulldom SAX API का उपयोग करता आंशिक डोम नोड्स के निर्माण के लिए; एक समूह के रूप में विशिष्ट उप-पेड़ खींचकर और फिर जब आप पूरा कर लें तो उन्हें हटाकर, आप एसओएक्स की स्मृति दक्षता को डोम के उपयोग की स्वच्छता के साथ प्राप्त कर सकते हैं।
यह एक अधूरा एपीआई है; जब मैंने इसका इस्तेमाल किया तो मुझे इसे पूरी तरह प्रयोग करने योग्य बनाने के लिए इसे संशोधित करना पड़ा, लेकिन यह नींव के रूप में काम करता है। मैं अब इसका उपयोग नहीं करता, इसलिए मुझे याद नहीं आया कि मुझे क्या जोड़ना है; बस एक अग्रिम चेतावनी।
यह बहुत धीमा है।
एक्सएमएल बड़े डेटा सेट को संभालने के लिए एक बहुत ही खराब प्रारूप है। यदि आपके पास स्रोत डेटा पर कोई नियंत्रण है, और यदि यह डेटा सेट के लिए समझ में आता है, तो आप छोटे टुकड़ों में डेटा को तोड़ने से काफी बेहतर हैं कि आप पूरी तरह से स्मृति में पार्स कर सकते हैं।
दूसरा विकल्प SAX एपीआई का उपयोग कर रहा है, लेकिन वे सीधे कुछ भी करने के लिए गंभीर दर्द हैं।
iterparse()
फ़ंक्शन देखें। बहुत बड़े दस्तावेजों को पार्स करने के लिए आप इसका उपयोग कैसे कर सकते हैं इसका विवरण here पाया जा सकता है।
iterparse() फ़ंक्शन आपकी समस्या का समाधान करेगा, मैंने हाल ही में 1 जीबी एक्सएमएल दस्तावेज़ को आसानी से मदद की है :) –
- 1. एक बड़ी एक्सएमएल फ़ाइल
- 2. एक बड़ी एक्सएमएल फ़ाइल
- 3. एक बहुत बड़ी फ़ाइल
- 4. क्या करक्स में बड़ी एक्सएमएल फाइलों को पार्स कर सकते हैं
- 5. पायथन xml ElementTree
- 6. पार्स जुनीट xml फ़ाइल
- 7. बहुत बड़ी फ़ाइल
- 8. एक बड़ी (+ - 1 जीबी) एक्सएमएल फ़ाइल
- 9. पायथन xml ElementTree?
- 10. फ़ाइल अपलोड बहुत बड़ी
- 11. सरल XML पार्स एक्सएमएल सूची में
- 12. बहुत बड़ी एक्सएमएल फाइलें संपादित करें
- 13. हास्केल पार्स कम xml फ़ाइल कम मेमोरी
- 14. एक बहुत बड़ी संख्या गूंज
- 15. ElementTree
- 16. ElementTree आयात करने में पाइथन त्रुटि को कैसे ठीक करें?
- 17. पायथन ElementTree
- 18. पाइथन में एक बड़ी फ़ाइल (10 जीबी +)
- 19. जावा ऑब्जेक्ट्स को बहुत बड़ी एक्सएमएल फाइलों और मार्शलिंग को पार्स करना
- 20. कैसे जबकि अजगर/ElementTree का उपयोग कर XML पार्सिंग टिप्पणियों रखने के लिए
- 21. पायथन ElementTree
- 22. पायथन में बहुत बड़ी एक्सएमएल फाइलें उत्पन्न करना?
- 23. HTTP बहुत बड़ी फ़ाइल डाउनलोड करें
- 24. Android में पार्स स्थानीय एक्सएमएल फ़ाइल
- 25. क्या कर सकते हैं कि sed क्या कर सकते हैं?
- 26. ओरेकल: एक बड़ी एक्सएमएल फ़ाइल लोड हो रहा है?
- 27. की तरह एक XML को देखते हुए ElementTree
- 28. क्या हम पाइथन में स्मार्ट-कॉपी कर सकते हैं?
- 29. पाइथन बड़ी सीएसवी फ़ाइल (numpy)
- 30. xml से छवि कैसे प्राप्त कर सकते हैं?
आपको बहुत बहुत धन्यवाद। – zhangwf