Skip to content

Instantly share code, notes, and snippets.

@Fabiocke
Created October 7, 2022 01:53
Show Gist options
  • Select an option

  • Save Fabiocke/e0123e66b86c2b531655c3b20b5e4b7d to your computer and use it in GitHub Desktop.

Select an option

Save Fabiocke/e0123e66b86c2b531655c3b20b5e4b7d to your computer and use it in GitHub Desktop.
import pandas as pd
import requests
from io import BytesIO
from zipfile import ZipFile
# le um arquivo csv ou txt dentro de um zip na internet e retorna um dataframe
def read_csv_from_zip(url, file, sep=';'):
# Requisição do arquivo
r=requests.get(url)
# Faz a leitura do arquivo zip
zf = ZipFile(BytesIO(r.content))
# Abre o arquivo desejado
file=zf.open(file)
# Cria uma lista com os dados e decodifica
lines = file.readlines()
lines=[i.strip().decode('ISO-8859-1') for i in lines]
file.close()
# separa por ; e coloca no dataframe
values = [i.replace('\n','').strip().split(sep) for i in lines]
df = pd.DataFrame(values[1:], columns=values[0])
return df
# ano = ano do demonstrativo
# cod = qual o demonstrativo
# tipo_periodo = 'ITR' ou 'DFP'
# tipo_demonstrativo = 'con' ou 'ind'
def relatorio_cias_abertas(ano, cod, tipo_periodo, tipo_demonstrativo):
url=f'http://dados.cvm.gov.br/dados/CIA_ABERTA/DOC/{tipo_periodo}/DADOS/{tipo_periodo.lower()}_cia_aberta_{ano}.zip'
arquivo = f'{tipo_periodo.lower()}_cia_aberta_{cod}_{tipo_demonstrativo}_{ano}.csv'
df = read_csv_from_zip(url, arquivo)
return df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment