csvtomt.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from random import randint
  2. import pandas as pd
  3. import re
  4. import sys
  5. info_df = pd.read_csv('export.csv', nrows=1, sep=';')
  6. # skiprows=16, na_values=''
  7. trans_df = pd.read_csv('export.csv', skiprows=2, sep=';',
  8. keep_default_na=False)
  9. iban = 'RO50BACX0000001138725000'
  10. st_nr = randint(100000000, 199999999)
  11. if sys.argv[1] is None:
  12. st_date = input('statement date==')
  13. else:
  14. st_date = sys.argv[1] # '190325'
  15. def dig_it(search_in, fl_point=100, pattern=r'\d+'):
  16. if re.search('-', search_in):
  17. return -int(''.join(re.findall(pattern, search_in))[:-2]) +\
  18. -int(''.join(re.findall(pattern, search_in))[-2:]) / fl_point
  19. else:
  20. return int(''.join(re.findall(pattern, search_in))[:-2]) +\
  21. int(''.join(re.findall(pattern, search_in))[-2:]) / fl_point
  22. def statm_header():
  23. o_bal = dig_it(info_df['Opening Balance'][0])
  24. if o_bal > 0:
  25. cd_mark = 'C'
  26. else:
  27. cd_mark = 'D'
  28. if re.search('.', info_df['Opening Balance'][0]):
  29. n = info_df['Opening Balance'][0].replace('.', '')
  30. else:
  31. n = info_df['Opening Balance'][0]
  32. tr_ref_nr = ':20:' + str(info_df['Account'][0]) + '\n'
  33. acc_id = ':25:' + iban + '\n'
  34. st_ref = ':28:' + str(st_nr) + '\n'
  35. in_op_balance = ':60F:' + cd_mark + st_date + info_df['Currency'][0] +\
  36. n + '\n'
  37. return tr_ref_nr + acc_id + st_ref + in_op_balance
  38. def statm_footer():
  39. c_bal = dig_it(info_df['Closing Balance'][0])
  40. if c_bal > 0:
  41. cd_mark = 'C'
  42. else:
  43. cd_mark = 'D'
  44. if re.search('.', info_df['Closing Balance'][0]):
  45. n = info_df['Closing Balance'][0].replace('.', '')
  46. else:
  47. n = info_df['Closing Balance'][0]
  48. fin_op_balance = ':62F:' + cd_mark + st_date + info_df['Currency'][0] + n
  49. return fin_op_balance
  50. def statm_transactions(elem):
  51. if dig_it(elem[1]) > 0:
  52. CD_mark = 'C'
  53. else:
  54. CD_mark = 'D'
  55. if re.search('-', elem[1]):
  56. elem[1] = elem[1].replace('-', '')
  57. if re.search('.', elem[1]):
  58. elem[1] = elem[1].replace('.', '')
  59. tr = ':61:' + elem[3][-2:] + elem[3][3:-5] + elem[3][:2] + elem[3][3:-5] +\
  60. elem[3][:2] + CD_mark + elem[1] + 'NTRF' + str(elem[-2]) +\
  61. elem[5] + '\n'
  62. inf = elem[14] + elem[16] + '\n'
  63. more_inf = ':86:' + '+31' + elem[9] + '\n' + '+32' + elem[10] + '+33/' +\
  64. str(elem[-7]) + '\n'
  65. return tr + inf + more_inf
  66. # -----------------------------------------------------
  67. # def statm_transactions(sequence):
  68. # for i in sequence: # trans_df.values:
  69. # if dig_it(i[1]) > 0:
  70. # CD_mark = 'C'
  71. # else:
  72. # CD_mark = 'D'
  73. # if re.search('-', i[1]):
  74. # i[1] = i[1].replace('-', '')
  75. # if re.search('.', i[1]):
  76. # i[1] = i[1].replace('.', '')
  77. # tr = ':61:' + i[3][-2:] + i[3][3:-5] + i[3][:2] + i[3][3:-5] + \
  78. # i[3][:2] + CD_mark + i[1] + 'NTRF' + str(i[-2]) + i[5] + '\n'
  79. # inf = i[14] + i[16] + '\n'
  80. # more_inf = ':86:' + i[9] + '\n' + i[10] + '\n' + str(i[-7])
  81. # return tr + inf + more_inf
  82. # -------------------------------------------------------
  83. transactions = map(statm_transactions, trans_df.values)
  84. with open('unicredit_mt940.txt', 'w') as export:
  85. export.write(statm_header())
  86. for elem in transactions:
  87. export.write(elem)
  88. export.write(statm_footer())
  89. # for elem in map(statm_transactions, trans_df.values):
  90. # print(elem)
  91. # print(statm_header())
  92. # print(statm_footer())
  93. # -------------------------------------------------------------------------------
  94. # print(info_df['Account Title'], info_df['Account'],
  95. # info_df['Currency'], info_df['Opening Balance'],
  96. # info_df['Closing Balance'])
  97. # -------------------------------------------------------------------------------
  98. # for i in df['Transaction details 1']:
  99. # print(i)
  100. # print(in_op_balance)