Manipulando arquivos ods em Python


Manipulando planilhas  em Python

Embora existam linguagens específicas para analise estatística, tais como a linguagem R, o uso da linguagem Python facilita a análise quando estamos simultaneamente trabalhando com imagens, sons , aquisição de dados em tempo real e atividades similares. E como uma das formas mais comuns de recebermos estes dados e na forma de planilhas de cálculo (ods) , precisamos de implementar uma forma de interagir com estas planilhas a partir de nossos scripts python.

Estes experimentos foram realizados com a seguinte plataforma:

  • Linux Mint 18.1, 64 bits
  • Python 3.5 (em ambiente virtual)
  • Planilhas  geradas por Libreoffice 5.1.6.2

O nosso objetivo com o experimento foi desenvolver uma solução para leitura de um arquivo referente a uma planilha libreofice e a correspondente geração de uma estrutura array ou dicionário python. E também gerar uma planilha a partir de uma estrutura de dados python.

Para não precisarmos entrar em detalhes sobre a codificação de arquivos libreoofice, selecionaremos uma biblioteca já desenvolvida e validada. Escolhemos a biblioteca pyexcel-ods3 para este fim.

Instalando a biblioteca pyexcel-ods3

Em primeiro lugar precisamos instalar as dependências da pyexcel-ods3:

1- ezodf: Pacote Python que interage com a planilha para extrair, adicionar, modificar ou pagar dados.

pip install ezodf

A versão instalada neste experimento foi a ezodf-0.3.2

2- lxml: Pacote Python para acesso às bibliotecas libxml2 e libxslt.

pip install lxml

A versão instalada neste experimento foi a lxml-3.8.0

3- pyexcel: Pacote python para operação com planilhas excel

pip install pyexcel

Finalmente, instalamos a pyexcel-ods3:

pip install pyexcel-ods3

A versão instalada neste experimento foi a pyexcel-ods3-0.5.0

Para exemplificar a utilização do pyexecel-ods3 vamos utilizar uma planilha  com os seguinte dados:

41 5 4 52 30 33
9 39 37 49 43 41
36 30 10 11 29 47
6 59 42 27 1 5
1 19 46 6 16 2
19 40 7 13 22 47
56 38 21 20 3 5
53 17 38 4 47 37
55 43 56 54 8 60

Todos os arquivos referentes a planilha e scripts python aqui apresentados estão disponíveis na página https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170906.tar.gz.

A API da pyexcel-ods3

Uma descrição completa da API você encontra no site https://pyexcel.readthedocs.io/en/latest/design.html . Vamos agora aprender como utilizar as chamadas da API mais utilizadas no dia a dia.

Lendo uma planilha para um array python

Para converter uma planilha libreoffice  em um array python utilizamos a função get.data(nomedo

.exemplo de uso da função get-data 
import pyexcel_ods3 as pods
import json

def main(args):
    data = pods.get_data("resultados.ods")
    print(json.dumps(data))
    return 0 

O programa completo, denominado ods2array.py , pode ser encontrado na página de downloads, https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170906.tar.gz.

Executando este script através da chamada python ods2array.py temos o seguinte resultado:

{“Planilha1”: [[41, 5, 4, 52, 30, 33], [9, 39, 37, 49, 43, 41], [36, 30, 10, 11, 29, 47], [], [6, 59, 42, 27, 1, 5], [1, 19, 46, 6, 16, 2], [19, 40, 7, 13, 22, 47], [56, 38, 21, 20, 3, 5], [53, 17, 38, 4, 47, 37], [55, 43, 56, 54, 8, 60]]}

Em termos de python temos um dicionário cuja chave é “Planilha1”, e uma sequencia de arrays contendo cada linha da tabela original.

Acessando um elemento específico da planilha

Suponhamos que desejamos acessar o segundo elemento da segunda linha. Como já temos um conjunto de listas python, fica muito simples:

.selecionando um elemento da matriz
def main(args):
    data = pods.get_data("resultados.ods")  # arquivo ods para dicionario "data"
    print (data['Planilha1'][1][1]) # extrai matriz de "data" e seleciona o item [1][1] 
    return 0

O programa completo, denominado ods2array_1.py , pode ser encontrado na página de downloads, https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170906.tar.gz.

Executando este script através da chamada python ods2array_1.py temos como resultado “39”, conforme pode ser verificado na tabela anterior.

Para saber quantas linhas e colunas tem a tabela lida

.identificando o número de linhas e colunas da matriz
def main(args):
    data = pods.get_data("resultados.ods")  # arquivo ods para dicionario "data"
    numeroLinhas= len (data['Planilha1'])
    numeroColunas= len (data['Planilha1'][0])
    print ("Linhas = ",numeroLinhas)
    print ("Colunas = ",numeroColunas) 
    return 0

O programa completo, denominado ods2array_2.py , pode ser encontrado na página de downloads, https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170906.tar.gz.

Executando este script através da chamada python ods2array_2.py temos como resultado:

Linhas = 10
Colunas = 6

Coincidindo com a tabela fornecida

Gravando uma planilha libreoffice a partir do python

Salvar uma planilha a partir do python também é muito fácil. Para exemplificar vamos multiplicar a planilha original por dois e salvar em um arquivo denominado “resultadosMultiplicados.ods”. A aba será denominada “Planilha2”. Observe o trecho de código responsável por criar o arquivo da planilha.

.salvando um arquivo ods a partir de um dicionário python
def main(args):
    dados = pods.get_data("resultados.ods")  # arquivo ods para dicionario "dados"
    
    dadoMultiplicado= mult_escalar(dados['Planilha1'],2) # matriz multiplicada por 2 
    
    dicionarioSaida= {}   #criamos um dicionario para salvar como planilha
    
    dicionarioSaida['Planilha2'] = dadoMultiplicado #dicionario preenchido 

    pods.save_data("resultadosMultiplicados.ods",dicionarioSaida) # resultados salvos como arquivo
    
    return 0

O programa completo, denominado ods2array_3.py , pode ser encontrado na página de downloads, https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170906.tar.gz.

Executando este script através da chamada python ods2array_3.py temos como resultado o arquivo “resultadosMultiplicados.ods”. Abrindo este arquivo com o Libreoffice verificamos que os valores numéricos são exatamente o dobro do arquivo original.

Agora você já sabe como abrir uma planilha, operar sobre seus valores e retornar como uma planilha!

Estes experimentos tem como objetivo mostrar como se lê e se escreve planilhas no formato libreoffice com o python. Para o processamento de matrizes matemáticas, o caminho correto é o numpy, que é bem mais rápido do que processar as listas python. Mas o procedimento de acesso às planilhas continua exatamente o mesmo.



                                      

Deixe um comentário