TheLegace

input.py

Nov 20th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.19 KB | None | 0 0
  1. #-------------------------------------------------------------------------------
  2. # Name:        input
  3. # Purpose:
  4. #
  5. # Author:      Vaibhav Kapoor and Adrian Barbur
  6. #
  7. # Created:     22/11/2012
  8. # Licence:     GPL
  9. #-------------------------------------------------------------------------------
  10. #!/usr/bin/env python
  11. # input.py
  12.    
  13. import re,sys,dateutil.parser as dateutil
  14.  
  15. class Input:
  16.   def __init__(self, filename):
  17.     self.csvfile = open(filename, 'r')
  18.     self.contents = self.csvfile.read()
  19.     self.initPatterns()
  20.    
  21.     valid = re.search(self.pattern, self.contents, re.MULTILINE)
  22.     rows = re.findall(self.rowPattern, self.contents, re.MULTILINE)
  23.     evals = re.findall(self.evalPattern, self.contents, re.MULTILINE)
  24.    
  25.     self.valid_file = True if valid else False
  26.     print 'Valid file' if self.valid_file else 'Not a valid file'
  27.     self.tr = map(toTr,rows)
  28.     self.dates = map(toDate,rows)
  29.    
  30.     self.start = self.dates[0] if not evals else dateutil.parse(evals[0][0])
  31.     self.end = self.dates[-1] if not evals else dateutil.parse(evals[0][1])
  32.  
  33.  
  34.   def initPatterns(self):
  35.     datePattern = ('(?:\d\d\d\d-\d\d-\d\d)')
  36.     qp = quotePattern('(?:Name: )')  
  37.     dp = quotePattern('(?:Description: )')
  38.     ap = quotePattern('(?:Account#: )')
  39.     ep = quotePattern('(?:Email: )')
  40.     adp = quotePattern('(?:Address: )')
  41.     pp = quotePattern('(?:Phone: )')
  42.     evp = quotePattern('(?:Evaluation Period: )')
  43.    
  44.     namePattern = r'(?:(?:'+qp+')[^\n]*\n)'
  45.     descPattern = r'(?:(?:'+dp+')[^\n]*\n)?'
  46.     accPattern = r'(?:(?:'+ap+')[^\n]*\n)?'
  47.     emailPattern = r'(?:(?:'+ep+')[^\n]*\n)?'
  48.     addrPattern = r'(?:(?:'+adp+')[^\n]*\n)?'
  49.     phonePattern = r'(?:(?:'+pp+')[^\n]*\n)?'
  50.     colPattern = r'(?:Transaction Date,Market Value,Cash Flow,Agent Fees,Benchmark,\n)'
  51.    
  52.     floatPattern = quotePattern(r'(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+])?)')
  53.     # TODO: Ask if benchmark needs to have a % sign or can be represented as decimal.
  54.     benchPattern = quotePattern(r'(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+])?%)')
  55.    
  56.     self.evalPattern = r'(?:(?:'+evp+')'+'('+datePattern+')'+' to '+'('+datePattern+')'+',*\n)'
  57.     self.rowPattern = r'(?:(^'+datePattern + '),' +'('+floatPattern+'),'+'('+floatPattern+')?,'+'('+floatPattern+')?,'+'('+benchPattern+')?,*\n)'
  58.     self.pattern = namePattern + descPattern + accPattern + emailPattern + addrPattern + phonePattern + self.evalPattern + '?'
  59.     self.pattern = self.pattern + '(?:[,\n]*)' + colPattern + self.rowPattern + '+(?:[,\n]*)'
  60.    
  61.  
  62. def stringToFloat(string, default):
  63.   if string:
  64.     return float(string)
  65.   else:
  66.     return default
  67.    
  68. def quotePattern(pattern):
  69.   return r'''(?:[^,"']*'''+ pattern+''')|(?:"[^"']*'''+ pattern +'''[^"']*")'''    
  70.  
  71. def toTr(row):
  72.   date = dateutil.parse(row[0])
  73.   mv = re.sub('[,"]*','',row[1])
  74.   mv = float(mv)
  75.   cf = stringToFloat(row[2],0)
  76.   af = stringToFloat(row[3],0)
  77.   bench = re.sub('[%]*','',row[4])
  78.   bench = stringToFloat(bench,None)
  79.   bench = bench/100. if bench else bench
  80.  
  81.   return (date,mv,cf,af,bench)
  82.  
  83. def toDate(row):
  84.   return dateutil.parse(row[0])
  85.    
  86. def main():
  87.     i = Input('input.csv')
  88.    
  89. if __name__ == '__main__':
  90.     main()
Advertisement
Add Comment
Please, Sign In to add comment