Last active
August 18, 2023 13:01
-
-
Save Vido/de4823b632e1fe875e8a48dd8f7e4a44 to your computer and use it in GitHub Desktop.
Exporta as DFPs da CVM para Excel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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