@flabot

Как поменять значение id в svg при помощи python?

Всем привет!
Встала задача обработать довольно-таки большой файлик с картой, что бы в будущем упростить себе работу.

SvgШка

<g id="Group 182">
<path id="Vector_791" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
<path id="Vector_792" d="" fill="white"/>
<path id="1478" d="" fill="#3F5714"/>
<path id="7.47" d="" fill="#454545"/>
</g>
<g id="1495">
<path id="Vector_795" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
<path id="Vector_796" d="" fill="white"/>
<path id="1495_2" d="" fill="#3F5714"/>
<path id="7.47" d="" fill="#454545"/>
</g>



Нужно обработать все Group и не затрагивать при этом g, у которых id - цифры
В данном примере нужно заменить "Group 182" на id из 3ей строки, то есть заменить на "1478"
3 строка в групах всегда является целым числом, 4я float

Ниже привожу то, что должно получится
SvgШка в итоге

<g id="1478">
<path id="Vector_791" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
<path id="Vector_792" d="" fill="white"/>
<path id="1478" d="" fill="#3F5714"/>
<path id="7.47" d="" fill="#454545"/>
</g>
<g id="1495">
<path id="Vector_795" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
<path id="Vector_796" d="" fill="white"/>
<path id="1495_2" d="" fill="#3F5714"/>
<path id="7.47" d="" fill="#454545"/>
</g>



Я начал накидывать, что-то простое, но с парсингом на python'e раньше не имел дел, поэтому прошу помощи с реализацией :(

Файл слишком большой для ручной замены каждого значения

upd: id="Group любое_число_порядка_нет"
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
@GeneD88
QA
xml_ = '''<svg>
    <g id="Group 182">
        <path id="Vector_791" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
        <path id="Vector_792" d="" fill="white"/>
        <path id="1478" d="" fill="#3F5714"/>
        <path id="7.47" d="" fill="#454545"/>
    </g>
    <g id="1495">
        <path id="Vector_795" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
        <path id="Vector_796" d="" fill="white"/>
        <path id="1495_2" d="" fill="#3F5714"/>
        <path id="7.47" d="" fill="#454545"/>
    </g>
</svg>'''
import lxml.etree as ET

root = ET.fromstring(xml_)
tree = ET.ElementTree(root)
svg_ = tree.getroot()

for i in svg_.findall(".//g"):
  if "Group" in i.attrib['id']:
    i.attrib['id'] = i.getchildren()[2].attrib['id']

print(ET.tostring(tree, pretty_print=True).decode("utf-8"))


<svg>
    <g id="1478">
        <path id="Vector_791" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
        <path id="Vector_792" d="" fill="white"/>
        <path id="1478" d="" fill="#3F5714"/>
        <path id="7.47" d="" fill="#454545"/>
    </g>
    <g id="1495">
        <path id="Vector_795" d="" fill="#C0D898" stroke="#806239" stroke-width="0.75" stroke-miterlimit="10"/>
        <path id="Vector_796" d="" fill="white"/>
        <path id="1495_2" d="" fill="#3F5714"/>
        <path id="7.47" d="" fill="#454545"/>
    </g>
</svg>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы