소스 검색

Restructure memos to make them alphabetically sortable

karianne
Sindre Stephansen 1 년 전
부모
커밋
81b37ddbd5
로그인 계정: sindre <sindre@sindrestephansen.com> GPG 키 ID: B06FC67D17A46ADE
1개의 변경된 파일40개의 추가작업 그리고 1개의 파일을 삭제
  1. +40
    -1
      ynab.py

+ 40
- 1
ynab.py 파일 보기

@@ -5,6 +5,7 @@ import csv
import re import re
from pathlib import Path from pathlib import Path


whitelist_cards = ["7756"]


def usage(): def usage():
print('Usage: ynab.py <filename>') print('Usage: ynab.py <filename>')
@@ -13,6 +14,44 @@ def usage():
def is_reserved(row): def is_reserved(row):
return '(Reservert)' in row[1] return '(Reservert)' in row[1]


def convert_memo(original):
original = re.match(r'="[ ]?(.+)"', original).groups()[0]
original = original.replace(" Kurs: 1.0000", "")
words = original.split(" ")

for i in range(20):
if words[0] == "":
# It's empty
del words[0]
elif m := re.match(r'\*(\d{4})', words[0]):
# It's the last four digits of a card
if m.groups()[0] in whitelist_cards:
# It's an expected card, ignore it
del words[0]
else:
# It's an unexpected card, move it to the end
words.append(words.pop(0))
elif m := re.match(r'\d{2}\.\d{2}', words[0]):
# It's the date. Move it to the end
words.append(words.pop(0))
elif (m1 := re.match(r'^[A-Z]{3}$', words[0])) and (m2 := re.match(r'[\d]+\.[\d]+', words[1])):
# It's the original currency
if words[0] == "NOK":
# It's Norwegian kroner, ignoring
del words[0]
del words[0]
else:
# It's some other currency, move it to the end
words.append(words.pop(0))
words.append(words.pop(0))
else:
break
else:
raise Exception(f"Infinite loop while parsing \"{original}\"")


return " ".join(words)



def convert(reader, writer): def convert(reader, writer):
header = ['Date', 'Payee', 'Memo', 'Outflow', 'Inflow'] header = ['Date', 'Payee', 'Memo', 'Outflow', 'Inflow']
@@ -45,7 +84,7 @@ def convert(reader, writer):
else: else:
money_out = -money money_out = -money


memo = re.match(r'="[ ]?(.+)"', row[2]).groups()[0]
memo = convert_memo(row[2])


new_row = [*row[:2], memo, money_out, money_in] new_row = [*row[:2], memo, money_out, money_in]
writer.writerow(new_row) writer.writerow(new_row)


불러오는 중...
취소
저장