A script to convert CSV exported from Sparebanken Sør to a format YNAB can import
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

65 wiersze
1.2KB

  1. #!/bin/python3
  2. import sys
  3. import csv
  4. import re
  5. from pathlib import Path
  6. def usage():
  7. print('Usage: ynab.py <filename>')
  8. def is_reserved(row):
  9. return '(Reservert)' in row[1]
  10. def convert(reader, writer):
  11. header = ['Date', 'Payee', 'Memo', 'Outflow', 'Inflow']
  12. writer.writerow(header)
  13. # Ignore header
  14. reader.__next__()
  15. for row in reader:
  16. if is_reserved(row):
  17. continue
  18. money_out = 0
  19. money_in = 0
  20. money = float(row[3].replace(',', '.'))
  21. if money >= 0:
  22. money_in = money
  23. else:
  24. money_out = -money
  25. memo = re.match(r'="[ ]?(.+)"', row[2]).groups()[0]
  26. new_row = [*row[:2], memo, money_out, money_in]
  27. writer.writerow(new_row)
  28. def main():
  29. if len(sys.argv) != 2:
  30. usage()
  31. exit(1)
  32. filepath = Path(sys.argv[1])
  33. new_basename = f'ynab-{filepath.name}'
  34. new_filepath = filepath.parent / new_basename
  35. with filepath.open(mode='r') as old_file:
  36. reader = csv.reader(old_file, delimiter=';')
  37. with new_filepath.open(mode='w') as new_file:
  38. writer = csv.writer(new_file)
  39. convert(reader, writer)
  40. if __name__ == '__main__':
  41. main()