-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfix_curency.py
executable file
·63 lines (50 loc) · 1.95 KB
/
fix_curency.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# programa para arrumar moeda nos arquivos OFX do cartão de crédito
# gerado pelo site do BB
# GnuCash não faz a conversão de moedas ao importar dados do cartão
# traz dolar como se fosse real
import argparse, re
def achaNumero(texto):
'''Encontra o valor numérico na linha do OFX
não estou querendo usar RE então uso substituicao
e depois tento ler como valor float'''
partes = texto.replace('>',';').replace('<',';').split(';')
for p in partes:
try:
v = float(p)
return v
except ValueError:
pass
def arrumaMoeda(linhas):
'''Recebe o arquivo OFX, como uma lista, obtido pelo readlines
encontra as linhas que contem o campo Currency, com a taxa de cambio
multiplica o campo do valor pela taxa
retorna a lista com as linhas alteradas'''
# encontrando as linhas com transações em outra moeda
# valor da transacao está 3 linhas antes
p = re.compile('.*CURRENCY.*')
taxas = [i for i,x in enumerate(linhas) if p.match(x)]
for l in taxas:
t = achaNumero(linhas[l])
v = achaNumero(linhas[l-3])
linhas[l] = '<CURRENCY><CURRATE>1.0000</CURRATE><CURSYM>USD</CURSYM></CURRENCY>\n'
linhas[l-3] = '<TRNAMT>{:.2f}</TRNAMT>\n'.format(t*v)
return linhas
def escreveSaida(linhas, saida):
'''saida: nome do arquivo'''
f = open(saida, 'w')
[f.write(l) for l in linhas]
f.close()
def main():
parser = argparse.ArgumentParser(description='Corrige moeda no arquivo OFX do cartão do BB')
parser.add_argument('entrada', help='Arquivo a ser convertido')
parser.add_argument('saida', help='Nome do arquivo de saída')
args = parser.parse_args()
infile = open(args.entrada, 'r')
linhas = infile.readlines()
infile.close()
convertido = arrumaMoeda(linhas)
escreveSaida(convertido, args.saida)
if __name__ == '__main__':
main()