2009/5/12 nickel flipper <nickelflip...@yahoo.com>: > sfr (key=PORTA addr=0xf80 size=1 access='rw rw rw u rw rw rw rw') > reset (por='xxxxxxxx' mclr='uuuuuuuu') > bit (names='RA7 RA6 RA5 - RA3 RA2 RA1 RA0' width='1 1 1 1 1 1 1 1') > bit (tag=scl names='RA' width='8') > bit (names='OSC1 OSC2 AN4 - AN3 AN2 AN1 AN0' width='1 1 1 1 1 1 1 1') > bit (names='CLKI CLKO nSS1 - VREF_PLUS VREF_MINUS C2INA C1INA' width='1 1 > 1 1 1 1 1 1') > bit (names='- - LVDIN - C1INB CVREF_MINUS PMPA7 PMPA6' width='1 1 1 1 1 1 > 1 1') > bit (names='- - RCV - - C2INB RP1 RP0' width='1 1 1 1 1 1 1 1') > bit (names='- - RP2 - - - - -' width='1 1 1 1 1 1 1 1')
Hmm, hairy! You could try looking into regular expressions. Let's see: \b\w+='.+?' That should be a regular expression matching the beginning of a word, followed by one or more word characters, an =, a ', some characters, up to the first '. i.e. we're trying to match things like "names='RA7 RA6 RA5 - RA3 RA2 RA1 RA0'" So, here we go: >>> import re >>> s = " bit (names='RA7 RA6 RA5 - RA3 RA2 RA1 RA0' width='1 1 1 1 1 1 1 1')" >>> rex = re.compile(r"\b\w+='.+?'") (note the r before the string.. that makes it a "raw" string and prevents backslashes from causing problems, mostly) >>> def to_dict(s): ... res = {} ... for token in rex.findall(s): ... word, rest = token.split('=') ... rest = rest.replace("'", '') ... res[word] = rest.split() ... return res ... (note that my regular expression, rex, is here effectively a global variable. That's convenient in the interactive interpreter, but you may want to do that a little differently in your final script) >>> to_dict(s) {'width': ['1', '1', '1', '1', '1', '1', '1', '1'], 'names': ['RA7', 'RA6', 'RA5', '-', 'RA3', 'RA2', 'RA1', 'RA0']} If regular expressions aren't powerful enough, you could look into a full-fledged parsing library. There are two I know of: simpleparse and pyparsing. SimpleParse works well if you're familiar with writing grammars: you write a grammar in the usual style, and simpleparse makes a parser out of it. pyparsing is more OO. -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor