#!/bin/python3 import sys import csv import re from pathlib import Path def usage(): print('Usage: ynab.py ') def is_final(row): return row[2] not in ['VISA', 'Varekjøp'] def convert(reader, writer): header = ['Date', 'Payee', 'Memo', 'Outflow', 'Inflow'] writer.writerow(header) # Ignore header reader.__next__() for row in reader: if not is_final(row): continue money_out = 0 money_in = 0 money = float(row[3].replace(',', '.')) if money >= 0: money_in = money else: money_out = -money memo = re.match(r'="[ ]?(.+)"', row[2]).groups()[0] new_row = [*row[:2], memo, money_out, money_in] writer.writerow(new_row) def main(): if len(sys.argv) != 2: usage() exit(1) filepath = Path(sys.argv[1]) new_basename = f'ynab-{filepath.name}' new_filepath = filepath.parent / new_basename with filepath.open(mode='r') as old_file: reader = csv.reader(old_file, delimiter=';') with new_filepath.open(mode='w') as new_file: writer = csv.writer(new_file) convert(reader, writer) if __name__ == '__main__': main()