Nova Função dia_util
ciencia de dados, utilitarios ·Aos poucos o framework para processar informações relativas a investimentos na Bolsa de Valores vai tomando forma, e surgindo funções utilitárias que serão amadurecidas conforme forem demandas e aplicadas, neste artigo apresento a função dia_util
que será trabalhada para retornar os dias úteis de um faixa de datas.
A função dia_util
foi criada para auxiliar na obtenção de dias úteis, na versão aqui apresentada ela não identifica automáticamente os feriados, mas é possível informar uma lista obtida em outra função que será criada futuramente uma lista com as datas que são feriados.
A Função dia_util
recebe como parâmetro obrigatório o ano que se quer obter os dias úteis, assim ela irá retornar todos os dias úteis do ano informado através do parâmetro ano=
do típo inteiro, é possível informar o mês ou meses que se deseja obter os dias úteis, para informar apenas um mês use o parâmetro mes=
, também do tipo inteiro, para informar uma lista de meses, faça através do parâmetro meses=
, sendo uma lista de típos inteiros, veja que mes=
tem maior precedência, como pode ser visto no algoritmo aqui apresentado. Além destes parâmetros também é possível informar um limite final de dias úteis através do parâmetro limite=
que é do típo string no formato dd/mm/aaaa
. E alista de feriados pode ser informada também no formato lista de string com a data formatada em dd/mm/aaaa
através do parametro feriados=
.
A função dia_util
irá retornar uma lista de strings com as datas no formato dd/mm/aaaa
Abaixo segue o código completo da função na data de publicação deste artigo:
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
import calendar
from datetime import datetime
def dia_util(ano, mes = None, meses=range(1,13), feriados=None, limite=None):
resutil = []
if mes:
meses = range(mes,mes+1)
for month in meses:
calutil = calendar.monthcalendar(ano, month)
weekutil = [week[0:5] for week in calutil]
for week in weekutil:
for day in week:
if day == 0:
continue
daystr = "{:02d}/{:02d}/{:4d}".format(day, month, ano)
if limite != None and datetime.strptime(limite,'%d/%m/%Y') <= datetime.strptime(daystr,'%d/%m/%Y'):
break
if feriados != None and daystr in feriados:
continue
resutil.append(daystr)
else:
continue
break
else:
continue
break
return resutil
Conclusão
Com certeza esta função pode ser melhorada, fica ai o desafio para trazer melhorias e apresenta-las nos comentários. Conforme surgirem melhorias atualizo este artigo ou farei um novo.