Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 41 additions & 39 deletions ibgeparser/microdados.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
log = Log()
log.init()

URL_DOCUMENTACAO='ftp://ftp.ibge.gov.br/Censos/{}/Resultados_Gerais_da_Amostra/Microdados/Documentacao.zip'
URL_MICRODADOS='ftp://ftp.ibge.gov.br/Censos/{}/Resultados_Gerais_da_Amostra/Microdados/{}.zip'
URL_DOCUMENTACAO='https://ftp.ibge.gov.br/Censos/{}/Resultados_Gerais_da_Amostra/Microdados/Documentacao.zip'
URL_MICRODADOS='https://ftp.ibge.gov.br/Censos/{}/Resultados_Gerais_da_Amostra/Microdados/{}.zip'
ARQUIVO_LAYOUT='Layout_microdados_Amostra.xls'
DIRETORIO_SAIDA='microdados-ibge'

Expand Down Expand Up @@ -149,43 +149,45 @@ def obter_dados_ibge(self, ano:enumerate, estados:list, modalidades:list, header

# extraindo csv de todos os estados selecionados pelo usuario no pacote
for enum_estado in estados:
try:
valor_estado, estado, sigla = enum_estado.value

log.info('Baixando informações do estado de {}'.format(estado))

url = URL_MICRODADOS.format(descricao_ano, sigla)
log.debug('Arquivo referente ao estado de {} extraído de: {}'.format(estado, url))

# download dos dados do estado
arquivo_zip_estado = self.__download_arquivo(url, os.path.join(pasta_temporaria, url.split('/')[-1]))
log.debug('Arquivo zip do estado salvo em: {}'.format(arquivo_zip_estado))

for enum_modalidade in modalidades:
try:
valor_modalidade, descricao_modalidade = enum_modalidade.value

nome_arquivo_modalidade = 'Amostra_{}_{}.txt'.format(descricao_modalidade, str(valor_estado))
log.debug('Nome arquivo modalidade: {}'.format(nome_arquivo_modalidade))

# extração do zip de dados do estado
arquivo_estado = self.__extrair_arquivo(arquivo_zip_estado, nome_arquivo_modalidade, pasta_temporaria)
log.debug('Arquivo do estado extraído em: {}'.format(arquivo_estado))

# conversão para csv
data = pd.read_fwf(arquivo_estado, colspecs=div_columns[descricao_modalidade])
data.columns = ibge_datasets[descricao_modalidade]['VAR'].tolist()

# salvando o csv
arquivo_csv = os.path.join(pasta_trabalho, '{}_{}.csv'.format(nome_arquivo_modalidade[:-4], sigla))
data.to_csv(arquivo_csv, encoding="utf-8-sig", header=header)

log.info('Arquivo de {} de modalidade {} extraído'.format(sigla, descricao_modalidade))
log.debug('Arquivo de {} de modalidade {} extraído em: {}'.format(sigla, descricao_modalidade, arquivo_csv))
except Exception as e:
log.error('Erro ao processar os dados de documentação: {}'.format(e))
except Exception as e:
log.error('Erro ao baixar os dados do estado: {}'.format(e))
valor_estado, estado, sigla = enum_estado.value

log.info('Baixando informações do estado de {}'.format(estado))

url = URL_MICRODADOS.format(descricao_ano, sigla)
log.debug('Arquivo referente ao estado de {} extraído de: {}'.format(estado, url))

# download dos dados do estado
arquivo_zip_estado = self.__download_arquivo(url, os.path.join(pasta_temporaria, url.split('/')[-1]))
log.debug('Arquivo zip do estado salvo em: {}'.format(arquivo_zip_estado))

for enum_modalidade in modalidades:
valor_modalidade, descricao_modalidade = enum_modalidade.value

nome_arquivo_modalidade = 'Amostra_{}_{}.txt'.format(descricao_modalidade, str(valor_estado))
log.debug('Nome arquivo modalidade: {}'.format(nome_arquivo_modalidade))

# extração do zip de dados do estado
arquivo_estado = self.__extrair_arquivo(arquivo_zip_estado, nome_arquivo_modalidade, pasta_temporaria)
log.debug('Arquivo do estado extraído em: {}'.format(arquivo_estado))

# conversão para csv
data = pd.read_fwf(arquivo_estado, colspecs=div_columns[descricao_modalidade], chunksize=100000)
data.columns = ibge_datasets[descricao_modalidade]['VAR'].tolist()

# salvando o csv
header_now = header
arquivo_csv = os.path.join(pasta_trabalho, '{}_{}.csv'.format(nome_arquivo_modalidade[:-4], sigla))
for chunk in data:
log.debug(f'Escrevendo chunk de dados no arquivo {arquivo_csv} com header {header_now}')
if header_now:
chunk.to_csv(arquivo_csv, encoding="utf-8-sig", header=data.columns, mode='w')
else:
chunk.to_csv(arquivo_csv, encoding="utf-8-sig", header=header_now, mode='a')
header_now = False
# data.to_csv(arquivo_csv, encoding="utf-8-sig", header=header)

log.info('Arquivo de {} de modalidade {} extraído'.format(sigla, descricao_modalidade))
log.debug('Arquivo de {} de modalidade {} extraído em: {}'.format(sigla, descricao_modalidade, arquivo_csv))

# apaga a pasta criada no diretório temporario
self.__remover_pasta_temporariaoraria(pasta_temporaria)
Expand Down