2015-01-24 3 views
4

У меня есть файл svg, который был сгенерирован программным обеспечением для отображения данных карты «Картограф». Он содержит большое количество путей, представляющих области на карте. Эти пути у каждого есть несколько полей данных:Как изменить атрибуты SVG-файла из Python?

<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 каждый раз, когда я хочу, чтобы изменить некоторые атрибуты, такие как количество «да» голосов, в рамках питон. В частности, я хотел бы увеличить/увеличить значение «да» голосов на единицу (для каждого исполнения кода).

Я попытался 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) 

Является ли питона лучший инструмент использовать для решения этой задачи? Если да, то как я могу изменить вышеуказанный код или начать заново. Извиняюсь за любую путаницу. Я новичок в этом модуле «lxml» и svg-файлах, поэтому я немного потерян.

ответ

3

Вы не установите атрибут снова, но использовать его значение вместо elmenet в этой строке:

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

yes_votes содержит содержание атрибута, а не ссылку на самом атрибут. Измените его на:

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

Спасибо, что сработало. Извините за глупый вопрос - я боролся какое-то время и, очевидно, имел немного мозгового пердуна, не обращая на это внимания. – urbanscape

Смежные вопросы