Python:从XML文档中获取某些价值的高效脚本?

时间:2013-07-31 22:49:21

标签: python xml libxml2

我有以下XML文档

<data>
    <point address="com.example.www" time="Jul 30, 2013 10:02:56 PM" protocol="http" type="2" body="404 Not Found" name="Example Site" />
    <point address="com.example.test" time="Jul 29, 2013 07:45:03 AM" protocol="https" type="2" body="This is a test" name="Test.example" />
    .......
</data>

我使用了以下Python代码:

import libxml2

def ReadValue(pn, dt):
    return [attr.content for attr in input_file.xpathEval("/data/point[@protocol='%s']/@%s" % (pn, dt))]

protocol = ["http", "https"]
data_type = ["body", "type", "time", "name"]

for i in protocol:
    for j in data_type:
        print ReadValue(i, j)

exit()

我怀疑ReadValue是解析超过200k标签时的瓶颈。它运行速度很慢,甚至在运行时我也无法Ctrl-C脚本。有没有比使用上面提到的代码更好的实现?

由于

1 个答案:

答案 0 :(得分:1)

然而,可能存在另一种低效率。

您正在为每个协议和每个data_type循环,然后为每个组合运行xpath,这需要对每个组合进行代价高昂的调用,并且我怀疑搜索成本高昂,因为我没有索引。

当您阅读每个元素并以这种方式收集数据时,您最好通过XML进行一次传递并阅读协议和data_type