top of page
  • Foto do escritorGabriel Quintella

Importando Arquivos Com Python

Atualizado: 23 de abr. de 2021

Salve, salve meus amigos! Vamos para mais um dia de treinamento. Nesse momento da pandemia espero que todos estejam bem e cuidando-se, pois não podemos dar mole para o Corona!


Esse post de hoje é bem interessante e deveria ser apresentado bem mais à frente por considera-lo avançado. No entanto, chegamos em um momento crucial onde precisaremos de muitos dados para trabalhar nos próximos tópicos e para alcançar esse objetivo pensei em várias soluções, tais como: importar os arquivos via SQL Server Import and Export, ou através do SQL Server Integration Services (SSIS) ou via script; todas as soluções são fantásticas, mas pensando melhor, por que não fazer uma introdução ao assunto Python e importar os nossos arquivos usando essa solução? Python é uma linguagem de desenvolvimento muito poderosa que vem sendo muito usada na área de Dados, mas esse assunto seria abordar mais à frente.


Nessa etapa, seremos bem direto, ou seja, precisamos importar arquivos em massa! Não vamos dar voltas explicado com detalhes a linguagem, pois isso será feito em outro momento. Aqui vamos abordar qual ferramenta usar para desenvolver os scripts, sua instalação, nada detalhado (deixarei um link do youtube e um e-learning da Microsoft) e explicarei em detalhes todo o processo de construção do nosso script para importação de dados. Não fiquem tristes, os conceitos do Python, sua aplicação e usabilidade partindo do início até o avançado ficará para outro momento, mas deixarei um link de referência para quem tiver curiosidade sobre o assunto! Podem deixar suas dúvidas nos comentários que irei responder a todos com o maior prazer.


Como o nosso foco é manipulação de dados e esse assunto é muito sensível, já que trabalhar com informações alheias sem a devida autorização pode gerar danos irreparáveis para companhias e até mesmo para quem os manipula. Para evitar tais problemas, vamos trabalhar com dados de domínio público. Por praticidade e conhecimento, escolhi uma fonte bem bacana que usei em meu projeto na pós graduação aplicando-a em uma solução de BI.


Vamos acessar essas informações de forma gratuita e sem risco de sanções através do site do TSE (https://www.tse.jus.br/eleicoes/estatisticas/repositorio-de-dados-eleitorais-1/repositorio-de-dados-eleitorais), isso mesmo, dados eleitorais. Nesse repositório, o TSE disponibiliza de forma gratuita informações de todas as eleições que ocorreram em nosso país.


Pois bem, vamos ao que interessa. Bora acessar o site do TSE e fazer o download!


Download de Arquivos de Dados


Ao realizar o acesso no link acima, seremos direcionados para a página do TSE conforme imagem abaixo.




Após acessar o site, no seu lado esquerdo clique em Candidatos, na tela seguinte selecione o ano 2020 e conforme imagem abaixo, escolha os dados de Vagas. Basta clicar em "Vagas (formato ZIP)".





Concluído o download, o próximo passo é descompactar os arquivos. No meu computador, criei a seguinte estrutura: Na raiz da unidade C:\ criei um diretório chamado "Projeto", dentro dele um outro diretório chamado "python" e dentro desse diretório criei um outro chamado "Importado", e depois descompactei os arquivos dentro do diretório "python".


Todas as fontes do TSE seguem um mesmo padrão. Quando descompactar o arquivo, encontrará vários arquivos com extensão CSV e um arquivo LEIAME.pdf. O arquivo em pdf "LEIAME.pdf" nada mais é do que um dicionário de dados que ajuda a identificar e como manipular os dados selecionados. Caso tenham interesse, recomendo a leitura para um bom entendimento, é bem simples, direta e objetiva!


Finalizado o processo de download, criação da estrutura e descompactação dos arquivos, etapa 1 concluída! Avançando...


A próxima etapa será a criação da estrutura que receberá nossos dados. Vamos criar uma tabela no nosso banco de TESTE, que foi criado em outro post, caso ainda não tenham assistido, deixo o link abaixo.



-- Script de Criação da Tabela VAGAS DISPONÍVEIS
CREATE TABLE [dbo].[Vagas_Disponiveis](
	[DT_GERACAO] [varchar](500) NULL,
	[HH_GERACAO] [varchar](500) NULL,
	[ANO_ELEICAO] [varchar](500) NULL,
	[CD_TIPO_ELEICAO] [varchar](500) NULL,
	[NM_TIPO_ELEICAO] [varchar](500) NULL,
	[CD_ELEICAO] [varchar](500) NULL,
	[DS_ELEICAO] [varchar](500) NULL,
	[DT_ELEICAO] [varchar](500) NULL,
	[DT_POSSE] [varchar](500) NULL,
	[SG_UF] [varchar](500) NULL,
	[SG_UE] [varchar](500) NULL,
	[NM_UE] [varchar](500) NULL,
	[CD_CARGO] [varchar](500) NULL,
	[DS_CARGO] [varchar](500) NULL,
	[QT_VAGAS] [varchar](500) NULL
) ON [PRIMARY]
GO

Criação concluída, mais uma etapa finalizada! Vamos avançar para instalar o Visual Studio Code.


Instalação do Visual Studio Code


Nessa etapa o objetivo é a instalação da ferramenta que será usada no desenvolvimento dos scripts em Python. Vamos acessar o link (https://code.visualstudio.com/download) para realizar o download do instalador do Visual Studio Code, fiquem tranquilos é um software gratuito da Microsoft, podem instalar sem problemas!


Após clicar no link, o próximo passo é escolher a versão do seu sistema operacional favorito, fazer o download e realizar a instalação. Estarei usando na minha máquina a versão para Windows, nesse caso a minha instalação é bem complexa, segue o tutorial, NEXT, NEXT e FINISH.



Caso tenham dúvidas, deixo abaixo um link de um vídeo bem bacana do Youtube. Ao término, não esqueçam de dar um like, inscrever no canal e ativar o sininho para receber as notificações!



Finalizada a instalação, vamos iniciar o nosso aplicativo.



Agora é a hora de preparar nosso ambiente! Vamos iniciar as configurações necessárias para nosso primeiro desenvolvimento. Na imagem acima destaquei em amarelo o ícone do repositório de Extensions disponível no VSCode, vamos clicar nele ou caso queiram um atalho, podemos clicar simultaneamente as teclas Ctrl+Shitt+X.



Na imagem acima, novamente destaco em amarelo onde pesquisar as extensões necessárias. Vamos precisar nesse momento do Python e do Jupyter. Selecione e mande-o instalar. Ao término da instalação, o próximo passo será realizar a configuração de duas bibliotecas, o Pandas e o PyODBC.


Tudo muito simples e rápido! Para realizar essa configuração, vamos abrir um notebook em Jupyter.


Com o Visual Studio Code aberto, precisamos apertar simultaneamente as teclas Ctrl+Shift+P, após isso e a tela abaixo será aberta.



Clique na opção destacada em amarelo, conforme imagem acima, e quando abrir digite os comandos abaixo:


Comando para instalação da biblioteca Pandas.

pip install pandas

Comando para instalação da biblioteca pyodbc.

pip install pyodbc

Selecione e informe os comandos abaixo conforme imagem e clique no botão que circulei de vermelho para poder executar todas as células.



Após a execução, o resultado no notebook!



Script Python para Importação de Arquivos


Está ficando bom hein! Vamos avançando. Antes disso vamos fazer uma verificação do que já realizamos. Download do arquivo realizado, tabela Vagas_Disponiveis criada, Visual Studio Code instalado, Python e Jupyter configurados, bibliotecas Pandas e PyODBC instaladas, que lindoooooooo! Próximo passo, montar nosso script em Python para ler o diretório, carregar no nosso Microsoft SQL Server.


Antes de iniciar, gostaria de compartilhar um e-learning bem interessante da Microsoft.



Agora sim, vamos seguir a programação...


Sempre que trabalhando com Python, precisamos importar algumas bibliotecas antes do nosso script propriamente dito. Nesse caso vamos precisar importar quatro bibliotecas.


  • pandas - usada para ler os arquivos;

  • pyodbc - usada para conexão com o banco de dados;

  • os - usada para ler os arquivos no diretório;

  • shutil - usada para mover os arquivos para o diretório importado.


# -- Bibliotecas
import pyodbc
import pandas as pd
import os 
import shutil
from os import listdir
from os.path import isfile, join

Para configuração da conexão com o banco de dados vamos precisar criar algumas variáveis.



# Definicao de parametros de conexao com o SQL Server
server = 'SERVIDOR\\INSTANCIA' 
database = 'NOME_DO_BANCO_DADOS' 
username = 'USUARIO' 
password = 'SENHA' 

# String de conexao
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

Vamos definir que nossa tabela será sempre limpa (Truncate Table) antes de executar a importação dos dados.



# Comando para limpar a tabela de destino
cursor.execute("TRUNCATE TABLE dbo.Vagas_Disponiveis")
cnxn.commit()

Definir duas variáveis que são para apontar o local de origem e destino dos arquivos.



# Diretorio onde estao os arquivos 
caminhoArquivo = '/Projetos/python/'

# Diretorio onde estao os arquivos 
caminhoArquivoImportado = '/Projetos/python/Importado/'

E agora vamos definir o fluxo de importação.


O primeiro passo será, listar o diretório informado na variável "caminhoArquivo", para não ter erros, vamos restringir o seu conteúdo para apenas arquivos "csv".



#Leitura do diretorio para buscar arquivos
for f in listdir(caminhoArquivo):
 if f.endswith(".csv"):

O próximo passo será a montagem do caminho para receber o arquivo (diretório + arquivo) e definir como será o formato do arquivo (separador, tratamento de valores nulos e codificação).



# Montagem do caminho do arquivo que será importado
dfcaminhoArquivo = os.path.join(caminhoArquivo,f)
dfcaminhoArquivo = pd.read_csv(dfcaminhoArquivo,sep=';',na_values=['Null'],encoding='windows-1252')

E por último, uma leitura do arquivo linha a linha para inserção no banco de dados e ao termino da leitura o mesmo será movido para o diretório informado na variável "caminhoArquivoImportado".



# Insercao do Dataframe no SQL Server:
for index, row in dfcaminhoArquivo.iterrows():
    nomeArquivoCompleto = caminhoArquivo+f
    cursor.execute("INSERT INTO dbo.Vagas_Disponiveis (DT_GERACAO, HH_GERACAO, ANO_ELEICAO, CD_TIPO_ELEICAO, NM_TIPO_ELEICAO, CD_ELEICAO, DS_ELEICAO, DT_ELEICAO, DT_POSSE, SG_UF, SG_UE, NM_UE, CD_CARGO, DS_CARGO, QT_VAGAS) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", row.DT_GERACAO, row.HH_GERACAO, row.ANO_ELEICAO, row.CD_TIPO_ELEICAO, row.NM_TIPO_ELEICAO, row.CD_ELEICAO, row.DS_ELEICAO, row.DT_ELEICAO, row.DT_POSSE, row.SG_UF, row.SG_UE, row.NM_UE, row.CD_CARGO, row.DS_CARGO, row.QT_VAGAS)
    cnxn.commit()
# Move arquivos diretorio Importado
shutil.move(caminhoArquivo+f,caminhoArquivoImportado)

Pronto, nosso script está pronto!




Reparem que na primeira imagem os arquivos estão no diretório "python" (deixei outros tipos de arquivos para poder validar a nossa regra de importar apenas csv) e na outra imagem o diretório "Importado" está vazio. Vamos testar o nosso código agora!






#Script Python - Importação Arquivos

# Definição de Bibliotecas
import pyodbc
import pandas as pd
import os 
import shutil
from os import listdir
from os.path import isfile, join

# Definicao de parametros de conexao com o SQL Server
server = 'LOCALHOST\\SQL2019' 
database = 'TESTE' 
username = 'python' 
password = 'Pyth0n!@#$%12345' 

# String de conexao
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

# Comando para limpar a tabela de destino
cursor.execute("TRUNCATE TABLE dbo.Vagas_Disponiveis")
cnxn.commit()
# Diretorio onde estao os arquivos 
caminhoArquivo = '/Projetos/python/'

# Diretorio onde estao os arquivos 
caminhoArquivoImportado = '/Projetos/python/Importado/'

# Leitura do diretorio para buscar arquivos
for f in listdir(caminhoArquivo):
    if f.endswith(".csv"):
        dfcaminhoArquivo = os.path.join(caminhoArquivo,f)
        dfcaminhoArquivo = pd.read_csv(dfcaminhoArquivo,sep=';',na_values=['Null'],encoding='windows-1252')
        # Insercao do Dataframe no SQL Server:
        for index, row in dfcaminhoArquivo.iterrows():
            nomeArquivoCompleto = caminhoArquivo+f
            cursor.execute("INSERT INTO dbo.Vagas_Disponiveis (DT_GERACAO, HH_GERACAO, ANO_ELEICAO, CD_TIPO_ELEICAO, NM_TIPO_ELEICAO, CD_ELEICAO, DS_ELEICAO, DT_ELEICAO, DT_POSSE, SG_UF, SG_UE, NM_UE, CD_CARGO, DS_CARGO, QT_VAGAS) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", row.DT_GERACAO, row.HH_GERACAO, row.ANO_ELEICAO, row.CD_TIPO_ELEICAO, row.NM_TIPO_ELEICAO, row.CD_ELEICAO, row.DS_ELEICAO, row.DT_ELEICAO, row.DT_POSSE, row.SG_UF, row.SG_UE, row.NM_UE, row.CD_CARGO, row.DS_CARGO, row.QT_VAGAS)
            cnxn.commit()
        # Move arquivos diretorio Importado
        shutil.move(caminhoArquivo+f,caminhoArquivoImportado)

Funcionou conforme esperávamos! Muito bom! Parabéns para todos nós! Arquivos importados e movimentados, reparem que apenas arquivos "csv" foram movimentados e consultando nossa tabela todos os dados foram importados!


Bem meu povo, terminamos por aqui mais um post, espero que tenham curtido!


Abaixo deixo alguns links de referência.


Bons estudos para todos!




Link Download Python: https://www.python.org/downloads/

Link Documentação Biblioteca Pandas: https://pandas.pydata.org/

Link Documentação Biblioteca PyODBC: https://pypi.org/project/pyodbc/

52 visualizações0 comentário

Posts recentes

Ver tudo

Kommentare


bottom of page