python how to parse css file as key value [closed]

2020-03-05 06:34发布

问题:


Want to improve this question? Update the question so it's on-topic for Stack Overflow.

Closed 5 years ago.

I have a css like a:

body, html { aaa: aaa }
h1, h2 { bbb: bbb; }
h3, h4, h5 { ccc: ccc; }

and i want to parse this string and get an ordered dict / or something like:

{
    'body, html': 'aaa: aaa',
    'h1, h2':  'bbb: bbb;',
    'h3, h4, h5': 'ccc: ccc;'
}

I want to know all selectors and their properties

anybody knows any python library for accomplish this?

thanks!

回答1:

I would suggest to use the cssutils module.

import cssutils
from pprint import pprint

css = u'''
body, html { color: blue }
h1, h2 { font-size: 1.5em; color: red}
h3, h4, h5 { font-size: small; }
'''

dct = {}
sheet = cssutils.parseString(css)

for rule in sheet:
    selector = rule.selectorText
    styles = rule.style.cssText
    dct[selector] = styles


pprint(dct)

Output:

{u'body, html': u'color: blue',
 u'h1, h2': u'font-size: 1.5em;\ncolor: red',
 u'h3, h4, h5': u'font-size: small'}

In your question you asked for a key/value representation. But if you do want to access the individial selectors or proprties, use rule.selectorList and iterate over its properties for rule.style:

for property in rule.style:
    name = property.name    
    value = property.value


回答2:

Try this

>>> a = [css for css in text.split("}\n") if css]
>>> a
['body, html { aaa: aaa ', 'h1, h2 { bbb: bbb; ', 'h3, h4, h5 { ccc: ccc; ']
>>> {i.split("{")[0].strip():i.split("{")[1].strip() for i in a}
{'h3, h4, h5': 'ccc: ccc;', 'body, html': 'aaa: aaa', 'h1, h2': 'bbb: bbb;'}

If you want to get rid of ; just strip it.