super_banner_728x90

terça-feira, 3 de julho de 2012

Criando arquivo do Excel (xls) com Python

Oi pessoal!

Hoje venho com uma dica legal para criar arquivos do Excel (extensão xls) a partir do Python. De forma parecida, você poderia criar arquivos do LibreOffice (extensão odt) ou mesmo tabelas em html.

Um dia desses me pediram para gerar um arquivo Excel com cores a partir de um arquivo de texto com sequências de DNA (um monte de bases A, T, C e G). Uma das alternativas é usar uma biblioteca do Python que permite fazer isso facilmente. Então hoje apresento a vocês a xlwt.

xlwthttp://pypi.python.org/pypi/xlwt/ | http://www.python-excel.org/

A partir de um conjunto de sequência (que podem vir de um arquivo texto), criei um arquivo Excel em que, dependendo da base (A, C, T ou G) a célula estaria em uma cor diferente. A biblioteca permite definir várias coisas como: número de planilhas, cor do texto e do fundo de células específicas, largura, altura, fórmulas matemáticas, entre outras coisas.

Veja o código abaixo para resolver o meu problema.


# -*- encoding: utf-8 -*-
# seq2xls.py - script para transformar sequências de nucleotídeos
#              (DNA) em arquivos de Excel (xls) com cores
# Criado em: 15/05/2012
# Última modificação: 03/07/2012
# Leandro Lima 

# Essa é a biblioteca a ser importada
import xlwt

# Aqui você define um estilo a ser usado
# (em quantas células você desejar).

# Iremos definir as seguintes cores (para o fundo da célula):
# A -> vermelho
styleA = xlwt.easyxf('pattern: pattern solid, fore_colour red;')

# C -> verde
styleC = xlwt.easyxf('pattern: pattern solid, fore_colour green;')

# G -> amarelo
styleG = xlwt.easyxf('pattern: pattern solid, fore_colour yellow;')

# T -> azul
styleT = xlwt.easyxf('pattern: pattern solid, fore_colour blue;')


# Definindo as sequências
sequencias = {'sequencia 1':'ACTGATCATGACATAGTAACCATGACATAGAA',
              'sequencia 2':'CTAGCATGCATGACTAGCATGACTGACTGACT',
              'sequencia 3':'CATCGACTCGACTCGACATCAGCAGCAGCATG',
              'sequencia 4':'CTGACTAGCAGATCAGCATACGACTAGCCACA',
              'sequencia 5':'CTAGCAGGACGACAGATTGACAGCAGAGCACA',
              'sequencia 6':'AATCACATCACGGCATACGACGACTAGCAGTA',
}

# Definindo planilha
wb = xlwt.Workbook()
ws = wb.add_sheet('Sequencias')

# Títulos das colunas
titles = ['identificador','sequencia']

# Escrevendo títulos na primeira linha do arquivo
for i in range(len(titles)):
    ws.write(0, i, titles[i])

# Definindo largura das células das sequência
for i in range(1,50):
    ws.col(i).width = 512

i = 1

for id_sequencia in sequencias.keys():

    # Obtendo a sequência do dicionário
    sequencia = sequencias[id_sequencia]

    # Escrevendo o identificar na 1ª coluna da linha i
    ws.write(i, 0, id_sequencia)

    for j in range(len(sequencia)):
        if j < len(sequencia):
            if sequencia[j]=='A':
                ws.write(i, 1+j, sequencia[j], styleA)
            elif sequencia[j]=='C':
                ws.write(i, 1+j, sequencia[j], styleC)
            elif sequencia[j]=='G':
                ws.write(i, 1+j, sequencia[j], styleG)
            elif sequencia[j]=='T':
                ws.write(i, 1+j, sequencia[j], styleT)
            else:
                ws.write(i, 1+j, sequencia[j])
        else:
            ws.write(i, 1+j, '')
    i += 1

# Salvando
wb.save('sequencias.xls')



O arquivo final vai sair com essa cara. Assim fica mais fácil saber se as sequências estão alinhadas em algum ponto.

Clique na imagem para ampliar