diff options
author | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2016-08-09 00:23:49 +0000 |
---|---|---|
committer | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2016-08-09 00:23:49 +0000 |
commit | b2c3ade75384efe76b8774b607e17fe98fab92ef (patch) | |
tree | b162262f3f0a4bc976d45bed08ccfc6cc9a2eb23 /trunk/src/examples/parseTabularData.py | |
parent | 0be19d2d8545f1ac4b93ffd0d10524613837ba39 (diff) | |
download | pyparsing-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/parseTabularData.py')
-rw-r--r-- | trunk/src/examples/parseTabularData.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/trunk/src/examples/parseTabularData.py b/trunk/src/examples/parseTabularData.py new file mode 100644 index 0000000..3846310 --- /dev/null +++ b/trunk/src/examples/parseTabularData.py @@ -0,0 +1,50 @@ +#
+# parseTabularData.py
+#
+# Example of parsing data that is formatted in a tabular listing, with
+# potential for missing values. Uses new addCondition method on
+# ParserElements.
+#
+# Copyright 2015, Paul McGuire
+#
+from pyparsing import col,Word,Optional,alphas,nums,ParseException
+
+table = """\
+ 1 2
+12345678901234567890
+COLOR S M L
+RED 10 2 2
+BLUE 5 10
+GREEN 3 5
+PURPLE 8"""
+
+# function to create column-specific parse conditions
+def mustMatchCols(startloc,endloc):
+ return lambda s,l,t: startloc <= col(l,s) <= endloc
+
+# helper to define values in a space-delimited table
+# (change empty_cell_is_zero to True if a value of 0 is desired for empty cells)
+def tableValue(expr, colstart, colend):
+ empty_cell_is_zero = False
+ if empty_cell_is_zero:
+ return Optional(expr.copy().addCondition(mustMatchCols(colstart,colend),
+ message="text not in expected columns"),
+ default=0)
+ else:
+ return Optional(expr.copy().addCondition(mustMatchCols(colstart,colend),
+ message="text not in expected columns"))
+
+
+# define the grammar for this simple table
+colorname = Word(alphas)
+integer = Word(nums).setParseAction(lambda t: int(t[0])).setName("integer")
+row = (colorname("name") +
+ tableValue(integer, 11, 12)("S") +
+ tableValue(integer, 15, 16)("M") +
+ tableValue(integer, 19, 20)("L"))
+
+# parse the sample text - skip over the header and counter lines
+for line in table.splitlines()[3:]:
+ print(line)
+ print(row.parseString(line).dump())
+ print('')
|