Есть ли способ прочитать большой (18 ГБ) XML файл неизвестной структуры от последнего к первому - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь прочитать файл XML большого размера (18 ГБ) с помощью функции iterparse (), и мне нужно записать элементы в виде файла CSV. Хорошо работает для первого экземпляра, но через некоторое время система зависает. Я использовал element.clear (). все еще обрабатывает очень медленно. Я сделал почти половину, так что, есть какие-нибудь шаги, чтобы прочитать этот файл из последней строки?

1 Ответ

0 голосов
/ 02 апреля 2020

Используйте SAX (вместо DOM). Это будет учитывать тот факт, что у вас есть очень большой файл для анализа.

Вам нужно будет реализовать ContentHandler, который будет записывать данные в csv.

См. Пример ниже:

import xml.sax
from xml import sax


class ExampleContentHandler(xml.sax.ContentHandler):
    def __init__(self):
        xml.sax.ContentHandler.__init__(self)

    def startElement(self, name, attrs):
        print('start:', name)

    def endElement(self, name):
        print('end:', name)

    def characters(self, content):
        print('chars:', content)

def main():
    xmlString = "<note>\n<to>Tove</to>\n<from>Jani</from>\n<heading>Reminder</heading>\n<body>Don't forget me this weekend!</body>\n</note>"

    sax.parseString(xmlString, ExampleContentHandler())


if __name__ == "__main__":
    main()
...