在Python中加速XML解析以创建数据帧

在Python中加速XML解析以创建数据帧,python,python-3.x,pandas,xml-parsing,Python,Python 3.x,Pandas,Xml Parsing,我正在解析一个包含1.500.000个节点的XML文件,因此可以将内容转储到数据帧中 它确实工作得很好,但是速度非常慢(将近10分钟!!),所以我想知道您是否有一些想法来修复这个过程并加快速度。我读过关于使用生成器的内容,但我不确定这是否适用于这里,因为我认为为了解析,必须首先在内存中读取完整的树结构(正确吗?) 这是我到目前为止所拥有的,请让我知道任何提高速度的建议 from lxml import etree as ET import pandas as pd def parse_xml_

我正在解析一个包含1.500.000个节点的XML文件,因此可以将内容转储到数据帧中

它确实工作得很好,但是速度非常慢(将近10分钟!!),所以我想知道您是否有一些想法来修复这个过程并加快速度。我读过关于使用生成器的内容,但我不确定这是否适用于这里,因为我认为为了解析,必须首先在内存中读取完整的树结构(正确吗?)

这是我到目前为止所拥有的,请让我知道任何提高速度的建议

from lxml import etree as ET
import pandas as pd

def parse_xml_fields(file, base_tag, tag_list):
    final_list = []

    root = ET.parse(file)

    nodes = root.findall(".//{}".format(base_tag))
    for node in nodes:
        item = {}
        for tag in tag_list:
            try:
                item[tag] = node.find(".//{}".format(tag)).text.strip()
            except:
                item[tag] = ""

        final_list.append(item)

    return final_list

results = parse_xml_fields("15.1-EX_XML_EDR_UO.xml", "RECORD", 
        ["NAME","SHORT_NAME","EDRPOU","ADDRESS","BOSS","KVED","STAN","FOUNDER"])
df = pd.DataFrame(results)
如果您想测试它,可以从以下位置获取XML:


它是一个包含两个XML的zip文件。我正在使用的是
15.1-EX\u XML\u EDR\u UO.XML

如果您可以共享该XML供我们测试,那会更好。@Sraw,您是对的,我已经编辑过了。您尝试过访问者模式吗?您好!你解决了这个问题吗?我面临着同样的问题,因为——据我所知——整个树需要循环才能获得数据。。。我无法加快将xml文件转换为Padnas DF的过程…:-(@LucasAimaretto)我从来没有像预期的那样解决过这个问题。我改变了我的体系结构,做了一些其他的事情:我使用了Golang,它速度更快,不会被这么大的XML阻塞,我将结果输出到一个数据库,而不是直接输出到DF,所以后来我可以使用Pandas从那里读取。