summaryrefslogtreecommitdiff
path: root/trunk/src/examples/configParse.py
diff options
context:
space:
mode:
authorptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b>2016-08-09 00:23:49 +0000
committerptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b>2016-08-09 00:23:49 +0000
commitb2c3ade75384efe76b8774b607e17fe98fab92ef (patch)
treeb162262f3f0a4bc976d45bed08ccfc6cc9a2eb23 /trunk/src/examples/configParse.py
parent0be19d2d8545f1ac4b93ffd0d10524613837ba39 (diff)
downloadpyparsing-b2c3ade75384efe76b8774b607e17fe98fab92ef.tar.gz
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
Diffstat (limited to 'trunk/src/examples/configParse.py')
-rw-r--r--trunk/src/examples/configParse.py72
1 files changed, 72 insertions, 0 deletions
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)
+