From b2c3ade75384efe76b8774b607e17fe98fab92ef Mon Sep 17 00:00:00 2001 From: ptmcg Date: Tue, 9 Aug 2016 00:23:49 +0000 Subject: TagTag for 2.1.6 release git-svn-id: svn://svn.code.sf.net/p/pyparsing/code/tags/pyparsing_2.1.6@402 9bf210a0-9d2d-494c-87cf-cfb32e7dff7b --- trunk/src/examples/configParse.py | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 trunk/src/examples/configParse.py (limited to 'trunk/src/examples/configParse.py') diff --git a/trunk/src/examples/configParse.py b/trunk/src/examples/configParse.py new file mode 100644 index 0000000..769249c --- /dev/null +++ b/trunk/src/examples/configParse.py @@ -0,0 +1,72 @@ +# +# configparse.py +# +# an example of using the parsing module to be able to process a .INI configuration file +# +# Copyright (c) 2003, Paul McGuire +# + +from pyparsing import \ + Literal, Word, ZeroOrMore, Group, Dict, Optional, \ + printables, ParseException, restOfLine, empty +import pprint + + +inibnf = None +def inifile_BNF(): + global inibnf + + if not inibnf: + + # punctuation + lbrack = Literal("[").suppress() + rbrack = Literal("]").suppress() + equals = Literal("=").suppress() + semi = Literal(";") + + comment = semi + Optional( restOfLine ) + + nonrbrack = "".join( [ c for c in printables if c != "]" ] ) + " \t" + nonequals = "".join( [ c for c in printables if c != "=" ] ) + " \t" + + sectionDef = lbrack + Word( nonrbrack ) + rbrack + keyDef = ~lbrack + Word( nonequals ) + equals + empty + restOfLine + # strip any leading or trailing blanks from key + def stripKey(tokens): + tokens[0] = tokens[0].strip() + keyDef.setParseAction(stripKey) + + # using Dict will allow retrieval of named data fields as attributes of the parsed results + inibnf = Dict( ZeroOrMore( Group( sectionDef + Dict( ZeroOrMore( Group( keyDef ) ) ) ) ) ) + + inibnf.ignore( comment ) + + return inibnf + + +pp = pprint.PrettyPrinter(2) + +def test( strng ): + print(strng) + try: + iniFile = open(strng) + iniData = "".join( iniFile.readlines() ) + bnf = inifile_BNF() + tokens = bnf.parseString( iniData ) + pp.pprint( tokens.asList() ) + + except ParseException as err: + print(err.line) + print(" "*(err.column-1) + "^") + print(err) + + iniFile.close() + print() + return tokens + +if __name__ == "__main__": + ini = test("setup.ini") + print("ini['Startup']['modemid'] =", ini['Startup']['modemid']) + print("ini.Startup =", ini.Startup) + print("ini.Startup.modemid =", ini.Startup.modemid) + -- cgit v1.2.1