用python解析此文本的最佳/更干净的方法是什么?

2024-10-02 20:40:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从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中最好的方法是什么? 谢谢


Tags: keysvgstroketitlergbsymbolfillparameters
1条回答
网友
1楼 · 发布于 2024-10-02 20:40:47

使用re模块用regexp进行解析非常简单

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'}}

相关问题 更多 >