Когда я пишу, это удаляет все данные из файла svg - PullRequest
0 голосов
/ 18 июня 2020

У меня проблема с кодом, изменяющим файл SVG в Python 2.7. Проще говоря, он раскрашивает поле в другой таблице в соответствии с введенным идентификатором. Но когда я его запускаю, у меня остается пустой файл.

from bs4 import BeautifulSoup
import re

    svg = (open('Draw.svg').read())
    soup = BeautifulSoup(svg, 'lxml')

    tags = soup.find_all('path')

    for path in tags:
        if path.attrs['id']==('FFF'):
            print(path.attrs['style'])
            Str = re.sub( r'fill:#[0-9a-fA-F]{6}',
                     r'fill:#ffffff',
                     path.attrs['style'])
            path.attrs['style'] = Str
            print(Str)

            print(path.attrs['style'])

    svg = open('Draw.svg', 'w')
    #svg.write(tags)
    svg.close()

Я что-то пропустил? Любая помощь будет оценена.

Я также думаю о том, чтобы улучшить код, чтобы иметь несколько входов для одновременного раскрашивания большего количества блоков.

Я немного изменил код, и он всегда возвращает пустой файл, но с ошибкой, когда я пытаюсь его открыть:

Домен ошибки 1, код 4 в строке 1 столбец 1

with open('Draw.svg', 'w') as file:
    file.write(str(tags))

Когда я получаю эту ошибку, мой код хорошо выполняется, я проверил его, открыв файл для xml кода svg, но он испортил беспорядок код xml, у меня сложилось впечатление что в нем отсутствуют части кодов по сравнению с исходным изображением

1 Ответ

0 голосов
/ 18 июня 2020

Другой метод.

from simplified_scrapy import SimplifiedDoc, req, utils
# svg = utils.getFileContent('Draw.svg')
svg = '''
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <path id="FFF" style="fill:#aabbcc" />
</svg>
''' # Your svg content
doc = SimplifiedDoc(svg)

tags = doc.selects('path#FFF')

for path in tags:
    print(path['style'])
    Str = doc.replaceReg(path['style'], 'fill:#[0-9a-fA-F]{6}', 'fill:#ffffff')
    path.setAttr('style', Str)
    print(Str)
    print(path['style'])

utils.saveFile('Draw.svg', doc.html)

Результат:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <path id="FFF" style="fill:#ffffff" />
</svg>

Вот еще примеры: https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...