Guest User

Untitled

a guest
Mar 25th, 2012
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.67 KB | None | 0 0
  1. # Modified after tips from
  2. # http://codereview.stackexchange.com/a/10322/12097
  3. # from Winston Ewert
  4. import sys
  5. import re
  6. import math
  7.  
  8. SCRIPTTITLE="PYTHON SIMPLE PROCESSOR (regex parsing, optimization v1)"
  9.  
  10. def main():
  11.     linecount=0
  12.     commentary=0
  13.     unknownline=0
  14.     data={}
  15.  
  16.     write = sys.stdout.write
  17.  
  18.     pattern_data=re.compile(r"^(\d+)\s+(\S+)\s+(\S+)\s+(\d+(?:\.\d+)?)")
  19.  
  20.     print("#",SCRIPTTITLE,"\n#TRANSFORMED INPUT",sep='')
  21.  
  22.     for line in sys.stdin:
  23.         linecount += 1
  24.         if line.startswith("#"):
  25.             commentary += 1
  26.             continue
  27.         line = line.replace(',','')
  28.         m = pattern_data.match(line)
  29.         if m:
  30.             i,k1,k2,value = m.groups()
  31.             value=float(value)
  32.             try:
  33.                 row = data[k1]
  34.             except KeyError:
  35.                 row = data[k1] = {}
  36.             try:
  37.                 row[k2] += value
  38.             except KeyError:
  39.                 row[k2] = value
  40.             write(",".join([i, str(value), k2, k1]))
  41.         else:
  42.             unknownline+=1
  43.  
  44.     print("#DATADUMP")
  45.  
  46.     keystat=0
  47.  
  48.     for k1 in sorted(data):
  49.         subkeys = data[k1]
  50.         write(k1+':')
  51.         keystat += len(subkeys)
  52.         for k2 in sorted(subkeys):
  53.             v = subkeys[k2]
  54.             write(''.join([' (',k2,':',str(math.trunc(v)),')']))
  55.         write("\n")
  56.  
  57.     report="#{0}\n#{1}\nparsed line: {2}, commentary line: {3}, unknown line: {4}, keystat: {5}.".format(
  58.                    SCRIPTTITLE, sys.version.replace("\n"," "), linecount, commentary, unknownline, keystat)
  59.  
  60.     print("#REPORT\n"+report,file=sys.stdout)
  61.     print(report,file=sys.stderr)
  62.  
  63. main()
Advertisement
Add Comment
Please, Sign In to add comment