gpt4 book ai didi

python - 如何从 Python SAX 解析器返回数据?

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:51 25 4
gpt4 key购买 nike

我一直在尝试解析一些 LXML 无法理解的巨大 XML 文件,所以我不得不用 xml.sax 来解析它们。 .

class SpamExtractor(sax.ContentHandler):
def startElement(self, name, attrs):
if name == "spam":
print("We found a spam!")
# now what?

问题是我不明白如何实际返回,或者更好的是,yield,这个处理程序发现给调用者的东西,而不用等待要解析的整个文件。到目前为止,我一直在摆弄 threading.ThreadQueue.Queue,但这会导致各种线程问题,这些问题确实让我分心于实际我正在尝试解决的问题。

我知道我可以在单独的进程中运行 SAX 解析器,但我觉得必须有一种更简单的方法来获取数据。有吗?

最佳答案

我想我会把它作为另一个答案,因为它是一种完全不同的方法。

您可能想查看 xml.etree.ElementTree.iterparse因为它似乎可以做更多你想做的事情:

Parses an XML section into an element tree incrementally, and reports what’s going on to the user. source is a filename or file object containing XML data. events is a list of events to report back. If omitted, only “end” events are reported. parser is an optional parser instance. If not given, the standard XMLParser parser is used. Returns an iterator providing (event, elem) pairs.

然后您可以编写一个生成器,使用该迭代器,执行您想要的操作,并生成您需要的值。

例如:

def find_spam(xml):
for event, element in xml.etree.ElementTree.iterparse(xml):
if element.tag == "spam":
print("We found a spam!")
# Potentially do something
yield element

主要区别在于您想要什么。 ElementTree 的迭代器方法更多是关于收集数据,而 SAX 方法更多是关于对数据进行操作。

关于python - 如何从 Python SAX 解析器返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com