如何从 Python 修改 SVG 文件的属性?
How can I modify the attributes of an SVG file from Python?
我有一个由地图数据可视化软件生成的 svg 文件 'Kartograph'。它包含大量表示地图上区域的路径。这些路径各有一些数据字段:
<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' 票数。具体来说,我想 increment/increase '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 文件的新手,所以我有点迷茫。
您没有再次设置该属性,而是在这一行中使用它的值而不是 elmenet:
yes_votes.set(yes_votes, str(int(yes_votes) + 1))
yes_votes
包含属性的内容而不是对属性本身的引用。将其更改为:
element.set( "data-yes", str(int(yes_votes) + 1))
我有一个由地图数据可视化软件生成的 svg 文件 'Kartograph'。它包含大量表示地图上区域的路径。这些路径各有一些数据字段:
<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' 票数。具体来说,我想 increment/increase '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 文件的新手,所以我有点迷茫。
您没有再次设置该属性,而是在这一行中使用它的值而不是 elmenet:
yes_votes.set(yes_votes, str(int(yes_votes) + 1))
yes_votes
包含属性的内容而不是对属性本身的引用。将其更改为:
element.set( "data-yes", str(int(yes_votes) + 1))