Skip to content

Instantly share code, notes, and snippets.

@Vido
Last active August 18, 2023 13:01
Show Gist options
  • Save Vido/de4823b632e1fe875e8a48dd8f7e4a44 to your computer and use it in GitHub Desktop.
Save Vido/de4823b632e1fe875e8a48dd8f7e4a44 to your computer and use it in GitHub Desktop.
Exporta as DFPs da CVM para Excel
import csv
import time
import zipfile
from pprint import pprint
import pandas
import requests
contas_list = [
'BPA', # Balanço Patrimonial de Ativos
'BPP', # Balanço Patrimonial de Passivos
'DFC_MD', # Demostração de Fluxo Cs. Metodo Direto
'DFC_MI', # Demostração de Fluxo Cs. Metodo Indireto
'DMPL', # Demostração Mutação Patr. Liq.
'DRE', # Demostração de Resultados do Exercício
'DVA', # Demostração de Valor Adicionado
]
url_template = 'http://dados.cvm.gov.br/dados/CIA_ABERTA/DOC/DFP/%s/DADOS/'
zip_template = '%s_cia_aberta_%d.zip'
csv_con_template = '%s_cia_aberta_con_%d.csv'
#csv_ind_template = '%s_cia_aberta_ind_%d.csv'
cvmzip_list = []
for conta in contas_list:
for ano in range(2010, 2020):
url = url_template % conta
cvmzip = zip_template % (conta.lower(), ano)
csv_con = csv_con_template % (conta.lower(), ano)
#csv_ind = csv_ind_template % (conta.lower(), ano)
cvmzip_list.append(
(url, cvmzip, csv_con)
)
def download():
for url, cvmzip, _ in cvmzip_list:
print(cvmzip)
response = requests.get(url + cvmzip)
with open(cvmzip, 'wb') as fp:
fp.write(response.content)
with zipfile.ZipFile(cvmzip, 'r') as zip_ref:
zip_ref.extractall()
# Intervalo para nao sobrecarregar o server
time.sleep(2)
def carrega_dados():
# Colunas do DMPL (mais completo)
colunas = ['CNPJ_CIA', 'DT_REFER', 'VERSAO', 'DENOM_CIA',
'CD_CVM', 'GRUPO_DFP', 'MOEDA', 'ESCALA_MOEDA',
'ORDEM_EXERC', 'DT_INI_EXERC', 'DT_FIM_EXERC',
'COLUNA_DF', 'CD_CONTA', 'DS_CONTA', 'VL_CONTA']
df_consolidado = pandas.DataFrame(columns=colunas)
for _, _, cvm_csv in cvmzip_list:
print(cvm_csv)
df = pandas.read_csv(cvm_csv, delimiter=';', encoding='iso-8859-1')
df_consolidado = df_consolidado.append(df)
return df_consolidado
if __name__ == '__main__':
download()
df_consolidado = carrega_dados()
# Exemplo: Lojas Renner no ano de 2019
slice1 = df_consolidado[df_consolidado['DENOM_CIA'] == 'LOJAS RENNER S.A.']
slice2019 = slice1[slice1['DT_REFER'] == '2019-12-31']
slice2019.to_excel('lren3_2019.xlsx')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment