如何从Python修改SVG文件的属性?

时间:2015-01-24 10:45:28

标签: python svg lxml

我有一个由地图数据可视化软件'Kartograph'生成的svg文件。它包含表示地图上区域的大量路径。这些路径都有一些数据字段:

<path d=" ...path info... " data-electorate="Canberra" data-id="Canberra" data-no="23" data-nop="0.92" data-percentile="6" data-state="ACT" data-totalvotes="25" data-yes="2" data-yesp="0.08" id="Canberra"/>

因此我不必每次都生成一个新的svg文件,我想在python中修改一些属性,例如'yes'投票的数量。具体来说,我想将“是”投票值增加/增加一(每次执行代码)。

我已经尝试过lxml并且已经广泛浏览了它的文档,但到目前为止这段代码还没有用:

from lxml import etree

filename = "aus4.svg"
tree = etree.parse(open(filename, 'r'))

for element in tree.iter():
    if element.tag.split("}")[1] == "path":
        if element.get("id") == "Lingiari":
            yes_votes = element.get("data-yes")
            print(yes_votes)
            yes_votes.set(yes_votes, str(int(yes_votes) + 1))
            print(yes_votes)

python是否是用于此任务的最佳工具?如果是这样,我怎么能改变上面的代码或重新开始。为任何困惑道歉。我是这个'lxml'模块和svg文件的新手,所以我有点迷失。

1 个答案:

答案 0 :(得分:3)

您不会再次设置该属性,而是在此行中使用其值而不是elmenet:

yes_votes.set(yes_votes, str(int(yes_votes) + 1))

yes_votes包含属性的内容,而不是对属性本身的引用。将其更改为:

element.set( "data-yes", str(int(yes_votes) + 1))