我需要从SVG.prop文件中解析以下文本:
parameters.styleList.0.fill=rgb (255, 0, 0)
parameters.styleList.0.key=-2.74, -2.391666666666667
parameters.styleList.0.markerSize=10,10
parameters.styleList.0.stroke=rgb (255, 0, 0)
parameters.styleList.0.strokeCapType=
parameters.styleList.0.strokeDashArray=
parameters.styleList.0.strokeJoinType=
parameters.styleList.0.strokeWidth=0.5px
parameters.styleList.0.symbol=
parameters.styleList.0.title=-2.740 - -2.392
parameters.styleList.1.fill=rgb (255, 85, 0)
parameters.styleList.1.key=-2.391666666666667, -2.0433333333333334
parameters.styleList.1.markerSize=10,10
parameters.styleList.1.stroke=rgb (255, 85, 0)
parameters.styleList.1.strokeCapType=
parameters.styleList.1.strokeDashArray=
parameters.styleList.1.strokeJoinType=
parameters.styleList.1.strokeWidth=0.5px
parameters.styleList.1.symbol=
parameters.styleList.1.title=-2.392 - -2.043
我需要为每个类(“ parameters.styleList。 0 .key”行中的第三个值)获取“ fill”,“ key”和“ title”值。 在Python3中执行此操作的最佳方法是什么? 谢谢
答案 0 :(得分:1)
使用re
模块可以很容易地用正则表达式进行解析。
import re
from collections import defaultdict
from pprint import pprint
data = """
parameters.styleList.0.fill=rgb (255, 0, 0)
parameters.styleList.0.key=-2.74, -2.391666666666667
parameters.styleList.0.markerSize=10,10
parameters.styleList.0.stroke=rgb (255, 0, 0)
parameters.styleList.0.strokeCapType=
parameters.styleList.0.strokeDashArray=
parameters.styleList.0.strokeJoinType=
parameters.styleList.0.strokeWidth=0.5px
parameters.styleList.0.symbol=
parameters.styleList.0.title=-2.740 - -2.392
parameters.styleList.1.fill=rgb (255, 85, 0)
parameters.styleList.1.key=-2.391666666666667, -2.0433333333333334
parameters.styleList.1.markerSize=10,10
parameters.styleList.1.stroke=rgb (255, 85, 0)
parameters.styleList.1.strokeCapType=
parameters.styleList.1.strokeDashArray=
parameters.styleList.1.strokeJoinType=
parameters.styleList.1.strokeWidth=0.5px
parameters.styleList.1.symbol=
parameters.styleList.1.title=-2.392 - -2.043
"""
style_re = re.compile('^parameters\.styleList\.(?P<id>.+?)\.(?P<property>.+?)=(?P<value>.*)$', re.MULTILINE)
styles = defaultdict(dict)
for match in style_re.finditer(data):
id, property, value = match.groups()
styles[id][property] = value
pprint(dict(styles))
输出
{'0': {'fill': 'rgb (255, 0, 0)',
'key': '-2.74, -2.391666666666667',
'markerSize': '10,10',
'stroke': 'rgb (255, 0, 0)',
'strokeCapType': '',
'strokeDashArray': '',
'strokeJoinType': '',
'strokeWidth': '0.5px',
'symbol': '',
'title': '-2.740 - -2.392'},
'1': {'fill': 'rgb (255, 85, 0)',
'key': '-2.391666666666667, -2.0433333333333334',
'markerSize': '10,10',
'stroke': 'rgb (255, 85, 0)',
'strokeCapType': '',
'strokeDashArray': '',
'strokeJoinType': '',
'strokeWidth': '0.5px',
'symbol': '',
'title': '-2.392 - -2.043'}}