gpt4 book ai didi

python - 使用 lxml.iterparse 两次解析相同的内容

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:00 26 4
gpt4 key购买 nike

我不明白为什么会这样:

content = urllib2.urlopen(url)

context = etree.iterparse(content, tag='{my_ns}my_first_tag')
context = iter(context)
#for event, elem in context:
# pass

context = etree.iterparse(content, tag='{my_ns}my_second_tag')
for event, elem in context:
pass

这不起作用的地方:

content = urllib2.urlopen(url)

context = etree.iterparse(content, tag='{my_ns}my_first_tag')
context = iter(context)
for event, elem in context:
pass

context = etree.iterparse(content, tag='{my_ns}my_second_tag')
for event, elem in context:
pass

并给我这个错误:

XMLSyntaxError: Extra content at the end of the document, line 1, column 1

我可以不解析相同的内容两次吗?奇怪的是,当我只评论循环而不是整个 iterparse 命令时它正在工作。

我是否想关闭某些东西?

非常感谢

最佳答案

urllib2.urlopen 为您提供一个类似文件的对象,您可以使用它来读取您正在查询的 URL 的内容。

我在这里猜测 etree.iterparse 返回一个可以迭代的对象,但在此之前根本不会触及 content 。在这种情况下,第一个循环使用 context 来迭代 content 的内容,“消耗”数据。

当您创建第二个 context 时,您将传递相同的 content,此时它是“空的”。

编辑:当您要求重新解析的方法时...一种方法是读出整个数据,然后使用 StringIO 作为将其分别传递给每个 iterparse 调用类文件对象。例如。

from StringIO import StringIO

# ...

data = content.read()
context = etree.iterparse(StringIO(data), tag='{my_ns}my_first_tag')
# processing...
context = etree.iterparse(StringIO(data), tag='{my_ns}my_second_tag')
# processing...

关于python - 使用 lxml.iterparse 两次解析相同的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860590/

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