from random import randint import pandas as pd import re import sys info_df = pd.read_csv('export.csv', nrows=1, sep=';') # skiprows=16, na_values='' trans_df = pd.read_csv('export.csv', skiprows=2, sep=';', keep_default_na=False) iban = 'RO50BACX0000001138725000' st_nr = randint(100000000, 199999999) if sys.argv[1] is None: st_date = input('statement date==') else: st_date = sys.argv[1] # '190325' def dig_it(search_in, fl_point=100, pattern=r'\d+'): if re.search('-', search_in): return -int(''.join(re.findall(pattern, search_in))[:-2]) +\ -int(''.join(re.findall(pattern, search_in))[-2:]) / fl_point else: return int(''.join(re.findall(pattern, search_in))[:-2]) +\ int(''.join(re.findall(pattern, search_in))[-2:]) / fl_point def statm_header(): o_bal = dig_it(info_df['Opening Balance'][0]) if o_bal > 0: cd_mark = 'C' else: cd_mark = 'D' if re.search('.', info_df['Opening Balance'][0]): n = info_df['Opening Balance'][0].replace('.', '') else: n = info_df['Opening Balance'][0] tr_ref_nr = ':20:' + str(info_df['Account'][0]) + '\n' acc_id = ':25:' + iban + '\n' st_ref = ':28:' + str(st_nr) + '\n' in_op_balance = ':60F:' + cd_mark + st_date + info_df['Currency'][0] +\ n + '\n' return tr_ref_nr + acc_id + st_ref + in_op_balance def statm_footer(): c_bal = dig_it(info_df['Closing Balance'][0]) if c_bal > 0: cd_mark = 'C' else: cd_mark = 'D' if re.search('.', info_df['Closing Balance'][0]): n = info_df['Closing Balance'][0].replace('.', '') else: n = info_df['Closing Balance'][0] fin_op_balance = ':62F:' + cd_mark + st_date + info_df['Currency'][0] + n return fin_op_balance def statm_transactions(elem): if dig_it(elem[1]) > 0: CD_mark = 'C' else: CD_mark = 'D' if re.search('-', elem[1]): elem[1] = elem[1].replace('-', '') if re.search('.', elem[1]): elem[1] = elem[1].replace('.', '') tr = ':61:' + elem[3][-2:] + elem[3][3:-5] + elem[3][:2] + elem[3][3:-5] +\ elem[3][:2] + CD_mark + elem[1] + 'NTRF' + str(elem[-2]) +\ elem[5] + '\n' inf = elem[14] + elem[16] + '\n' more_inf = ':86:' + '+31' + elem[9] + '\n' + '+32' + elem[10] + '+33/' +\ str(elem[-7]) + '\n' return tr + inf + more_inf # ----------------------------------------------------- # def statm_transactions(sequence): # for i in sequence: # trans_df.values: # if dig_it(i[1]) > 0: # CD_mark = 'C' # else: # CD_mark = 'D' # if re.search('-', i[1]): # i[1] = i[1].replace('-', '') # if re.search('.', i[1]): # i[1] = i[1].replace('.', '') # tr = ':61:' + i[3][-2:] + i[3][3:-5] + i[3][:2] + i[3][3:-5] + \ # i[3][:2] + CD_mark + i[1] + 'NTRF' + str(i[-2]) + i[5] + '\n' # inf = i[14] + i[16] + '\n' # more_inf = ':86:' + i[9] + '\n' + i[10] + '\n' + str(i[-7]) # return tr + inf + more_inf # ------------------------------------------------------- transactions = map(statm_transactions, trans_df.values) with open('unicredit_mt940.txt', 'w') as export: export.write(statm_header()) for elem in transactions: export.write(elem) export.write(statm_footer()) # for elem in map(statm_transactions, trans_df.values): # print(elem) # print(statm_header()) # print(statm_footer()) # ------------------------------------------------------------------------------- # print(info_df['Account Title'], info_df['Account'], # info_df['Currency'], info_df['Opening Balance'], # info_df['Closing Balance']) # ------------------------------------------------------------------------------- # for i in df['Transaction details 1']: # print(i) # print(in_op_balance)