Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. """
  2. Created on 20 August 2017
  3.  
  4. Loans Summary
  5.  
  6. Validation
  7.  
  8. @author: Peter Wilson
  9. """
  10. import re
  11. import csv
  12. import argparse
  13. import collections
  14. from datetime import datetime
  15.  
  16.  
  17. def csv_to_dict(loans_csv):
  18. """Convert loans csv to
  19. Python dictionary"""
  20. loans_dict = csv.DictReader(open(loans_csv))
  21. return loans_dict
  22.  
  23.  
  24. def dict_to_agg_dict(loans_dict):
  25. """Aggregate loans by
  26. (Network, Product, Month)"""
  27. agg_dict = collections.OrderedDict()
  28. for row in loans_dict:
  29. network = re.sub(r"'", '', row['Network'])
  30. product = re.sub(r"'", '', row['Product'])
  31. # assumed month per year to be aggregated
  32. month = re.findall(r'([A-z]+?-d{4})', row['Date'])[0]
  33. # assumed currency rounded to closet rounded number
  34. currency = float(row['Amount'])
  35. dict_key = (network, product, month)
  36. agg_dict.setdefault(dict_key, []).append(currency)
  37. return agg_dict
  38.  
  39.  
  40. def agg_dict_to_lists(agg_dict):
  41. """Convert aggregated dictionary
  42. to Python list of lists"""
  43. summary_list = []
  44. for key, values in agg_dict.iteritems():
  45. values_list = list(key)
  46. currency_sum = sum(values)
  47. counts = len(values)
  48. values_list.insert(len(values_list), currency_sum)
  49. values_list.insert(len(values_list), counts)
  50. summary_list.append(values_list)
  51. return summary_list
  52.  
  53.  
  54. def output_csv_summary(summary_list, output_csv_folder):
  55. """Write aggregated results
  56. into output csv"""
  57. current_date = datetime.today().strftime("{0}{1}{2}".format("%y", "%m", "%d"))
  58. csv_name = "{0}_{1}.csv".format("Output", current_date)
  59. output_csv = "{0}\{1}".format(output_csv_folder, csv_name)
  60. print("Writing {0} to {1}".format(csv_name, output_csv_folder))
  61. csv_header = ["Network", "Product", "MonthYear", "Currency", "Count"]
  62. with open(output_csv, 'wb') as csvfile:
  63. csvwriter = csv.writer(csvfile)
  64. csvwriter.writerow(csv_header)
  65. for row in summary_list:
  66. try:
  67. csvwriter.writerow(row)
  68. except UnicodeError as e:
  69. print(e)
  70.  
  71.  
  72. def validate_loans(loans_csv, output_csv_folder):
  73. """Validate loans summary from
  74. accounts with system"""
  75. loans_dict = csv_to_dict(loans_csv)
  76. agg_dict = dict_to_agg_dict(loans_dict)
  77. summary_list = agg_dict_to_lists(agg_dict)
  78. output_csv_summary(summary_list, output_csv_folder)
  79.  
  80.  
  81. if __name__ == '__main__':
  82. parser = argparse.ArgumentParser(description='Validate accounting loans summary against system')
  83. parser.add_argument('--loans_csv', metavar='path', required=True,
  84. help='path to input loans csv')
  85. parser.add_argument('--output_csv_folder', metavar='path', required=True,
  86. help='path to output csv folder')
  87. args = parser.parse_args()
  88. validate_loans(loans_csv=args.loans_csv, output_csv_folder=args.output_csv_folder)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement