A script to convert CSV exported from Sparebanken Sør to a format YNAB can import
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

65 行
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_final(row):
  9. return row[2] not in ['VISA', 'Varekjøp']
  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 not is_final(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()