Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-------------------------------------------------------------------------------
- # Name: input
- # Purpose:
- #
- # Author: Vaibhav Kapoor and Adrian Barbur
- #
- # Created: 22/11/2012
- # Licence: GPL
- #-------------------------------------------------------------------------------
- #!/usr/bin/env python
- # input.py
- import re,sys,dateutil.parser as dateutil
- class Input:
- def __init__(self, filename):
- self.csvfile = open(filename, 'r')
- self.contents = self.csvfile.read()
- self.initPatterns()
- valid = re.search(self.pattern, self.contents, re.MULTILINE)
- rows = re.findall(self.rowPattern, self.contents, re.MULTILINE)
- evals = re.findall(self.evalPattern, self.contents, re.MULTILINE)
- self.valid_file = True if valid else False
- print 'Valid file' if self.valid_file else 'Not a valid file'
- self.tr = map(toTr,rows)
- self.dates = map(toDate,rows)
- self.start = self.dates[0] if not evals else dateutil.parse(evals[0][0])
- self.end = self.dates[-1] if not evals else dateutil.parse(evals[0][1])
- def initPatterns(self):
- datePattern = ('(?:\d\d\d\d-\d\d-\d\d)')
- qp = quotePattern('(?:Name: )')
- dp = quotePattern('(?:Description: )')
- ap = quotePattern('(?:Account#: )')
- ep = quotePattern('(?:Email: )')
- adp = quotePattern('(?:Address: )')
- pp = quotePattern('(?:Phone: )')
- evp = quotePattern('(?:Evaluation Period: )')
- namePattern = r'(?:(?:'+qp+')[^\n]*\n)'
- descPattern = r'(?:(?:'+dp+')[^\n]*\n)?'
- accPattern = r'(?:(?:'+ap+')[^\n]*\n)?'
- emailPattern = r'(?:(?:'+ep+')[^\n]*\n)?'
- addrPattern = r'(?:(?:'+adp+')[^\n]*\n)?'
- phonePattern = r'(?:(?:'+pp+')[^\n]*\n)?'
- colPattern = r'(?:Transaction Date,Market Value,Cash Flow,Agent Fees,Benchmark,\n)'
- floatPattern = quotePattern(r'(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+])?)')
- # TODO: Ask if benchmark needs to have a % sign or can be represented as decimal.
- benchPattern = quotePattern(r'(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+])?%)')
- self.evalPattern = r'(?:(?:'+evp+')'+'('+datePattern+')'+' to '+'('+datePattern+')'+',*\n)'
- self.rowPattern = r'(?:(^'+datePattern + '),' +'('+floatPattern+'),'+'('+floatPattern+')?,'+'('+floatPattern+')?,'+'('+benchPattern+')?,*\n)'
- self.pattern = namePattern + descPattern + accPattern + emailPattern + addrPattern + phonePattern + self.evalPattern + '?'
- self.pattern = self.pattern + '(?:[,\n]*)' + colPattern + self.rowPattern + '+(?:[,\n]*)'
- def stringToFloat(string, default):
- if string:
- return float(string)
- else:
- return default
- def quotePattern(pattern):
- return r'''(?:[^,"']*'''+ pattern+''')|(?:"[^"']*'''+ pattern +'''[^"']*")'''
- def toTr(row):
- date = dateutil.parse(row[0])
- mv = re.sub('[,"]*','',row[1])
- mv = float(mv)
- cf = stringToFloat(row[2],0)
- af = stringToFloat(row[3],0)
- bench = re.sub('[%]*','',row[4])
- bench = stringToFloat(bench,None)
- bench = bench/100. if bench else bench
- return (date,mv,cf,af,bench)
- def toDate(row):
- return dateutil.parse(row[0])
- def main():
- i = Input('input.csv')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment