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.
xlwt - http://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 |