Como baixar dados em planilha e arrumar para arquivo de texto

Suponha que você tenha feito um script que precisa de dados de entrada disponibilizados por um site. O problema é que esse site deixa disponível para download um arquivo de planilha Excel (xls), pdf ou documento de texto Word (doc), e ainda por cima compactado. Esses não são bons formatos para guardar muitos dados, já que são difíceis de manipular e ainda gravam um monte de informações a respeito de formatação (muitas vezes incompatíveis dependendo do sistema operacional ou versão do leitor), inúteis para quem vai trabalhar só com os valores e/ou texto puro (popularmente chamado de “ASCII”).

Já passou por isso? Então seus problemas acabaram! Chegou o novo script “baixa_arruma_dados_tabajara.sh”… tá, esse script pode não resolver seus problemas mas já é um começo para automatizar a tarefa. Para resolver esse problema foram criadas duas rotinas (uma em shell script e outra em R):

Atualização: um script em R que abre diretamente um arquivo XLSX e um arquivo com colunas de largura fixa está disponível no post Como abrir planilhas Excel e arquivos de coluna fixa no R.

– Script “baixa_arruma_dados.sh”

Tem a função de baixar o arquivo XLS de um link, converter para csv e selecionar linhas que interessam. Como exemplo, está um arquivo do site do Operador Nacional do Sistema Elétrico (ONS) – não garanto que estará sempre lá esse arquivo, mas lá tem algumas linhas com valores médios, e são essas que interessam. O nome desse arquivo deve entrar como argumento. O script também chama a segunda rotina (veja mais abaixo) e depois remove os arquivos temporários.

O comando dos2unix serve converter a quebra de linha do formato DOS para o UNIX. Para conversão dos formatos da Microsoft, foram utilizados os programas xls2csv e xlsx2csv, instalados através de “sudo apt install catdoc xlsx2csv” (pra trabalhar com xls e xlsx, respectivamente). Outras opções são usar o libreoffice (1ª linha) ou o gnumeric (2ª linha):

O comando do libreoffice só funciona corretamente se não tiver nenhuma janela do Office aberta.

– Script transpose.R

A transposição de uma matriz faz com que as linhas sejam transformadas em colunas (e vice-versa). A linguagem R é muito mais elegante para transpor uma matriz do que o shell script (procure transposição de matrizes em linguagem C para ter uma ideia). O script a seguir recebe como argumento os nomes dos arquivos de entrada de dados e onde serão gravados os valores. Além de ler o arquivo csv, guardar os valores em uma matriz e transformá-la na matriz transposta, ele seleciona somente algumas linhas que interessam – no caso, as que tem o valor médio.

Uma outra opção, para o caso de ter opções que exijam a interação do usuário através de menu HTML, pode ser vista no post sobre Python. Veja mais opções no outro post com Exemplos de scripts para reorganizar dados. Caso queira extrair dados de um arquivo PDF, clique no link para ver como fazer isso via shell script.

(Extra) Script para baixar arquivo mais recente

Uma dica: caso esse arquivo a ser baixado seja o mais recente dentro de uma sequência de diretórios, segue um script em PHP para encontrar e baixas esse arquivo – como exemplo, segue novamente o site do ONS:

Caso você seja o programador da página, existe uma forma bem fácil de criar um botão para o usuário exportar uma tabela HTML para um arquivo CSV a ser baixado diretamente para o computador do usuário, sem tem que gerar arquivo no servidor, somente usando javascript/jQuery – clique no link para saber como usar.