最近在做毕设,遇到一个需要重复复制粘贴的东西,顺手写了一个python脚本。目标是,将Inkscape绘制SVG文件的<g><path><rect><text>
标签的属性inkscape:label批量复制给id
github地址https://github.com/Robert30-xl/SVG-setAttribute-for-Inkscape
SVG-setAttribute-for-Inkscape是一个python脚本。使用Inkscape绘制SVG文件,在Inkscape的”图层和对象“可以很方便地为属性inkscape:label赋值,但是id属性需要再次复制粘贴,这个无聊并且重复的工作交给python吧!
import xml.dom.minidom
dom = xml.dom.minidom.parse('你的SVG文件.svg') #打开svg文档(这里将SVG和脚本放到一个目录)
root = dom.documentElement #得到文档元素对象
gList = root.getElementsByTagName('g') #得到所有g标签
pathList = root.getElementsByTagName('path') #得到所有path标签
rectList = root.getElementsByTagName('rect') #得到所有rect标签
textList = root.getElementsByTagName('text') #得到所有text标签
# 设置g
for index in range(len(gList)):
label = gList[index].getAttribute('inkscape:label')
if gList[index].hasAttribute('inkscape:label'):
# id = gList[index].getAttribute('id')
gList[index].setAttribute('id',label[1:])
# 设置path
for index in range(len(pathList)):
label = pathList[index].getAttribute('inkscape:label')
if pathList[index].hasAttribute('inkscape:label'):
# id = pathList[index].getAttribute('id')
pathList[index].setAttribute('id',label[1:])
# 设置rect
for index in range(len(rectList)):
label = rectList[index].getAttribute('inkscape:label')
if rectList[index].hasAttribute('inkscape:label'):
# id = rectList[index].getAttribute('id')
rectList[index].setAttribute('id',label[1:])
# 设置text
for index in range(len(textList)):
label = textList[index].getAttribute('inkscape:label')
if textList[index].hasAttribute('inkscape:label'):
# id = textList[index].getAttribute('id')
textList[index].setAttribute('id',label[1:])
'''
将文档进行重写,注意文档中内容含有中文的情况
open()函数默认是文本模式打开,也就是ANSII编码
在简体中文系统下,ANSII编码代表 GB2312 编码
'''
with open('HPC发端模型.svg', 'w', encoding='utf-8') as f:
# 缩进 - 换行 - 编码
dom.writexml(f, addindent='', encoding='utf-8')