In [39]:
function listaralineamientos(direccion, extension::Regex=r"\.fasta$"; vacios::Bool=false)
alns = ASCIIString[]
for nombre in readdir(direccion)
if ismatch(extension, nombre)
if vacios || filesize(joinpath(direccion, nombre)) > 0
push!(alns, nombre)
end
end
end
alns
end
function list_alns_filter(direccion, extension::Regex=r"\.fasta$"; vacios::Bool=false)
# COMPLETAR
end
Out[39]:
Pistas:
filter!
elimina de un vector los elementos para los cuales una función retorna false
. ismatch
con esa Regex
.
In [40]:
using Base.Test
# variable -> ... es la notación para una función anónima
@test filter!(r"\.fasta$", readdir("data")) == filter!(x -> ismatch(r"\.fasta$", x), readdir("data"))
In [41]:
function list_alns_filter(direccion, extension::Regex=r"\.fasta$"; vacios::Bool=false)
alns = filter!(extension, readdir(direccion))
if !vacios
filter!(nombre -> filesize(joinpath(direccion, nombre)) > 0, alns)
end
alns
end
Out[41]:
In [42]:
@test list_alns_filter("data") == listaralineamientos("data")
@test list_alns_filter("data", vacios=true) == listaralineamientos("data", vacios=true)
@test list_alns_filter("data", r"\.stockholm$") == listaralineamientos("data", r"\.stockholm$")
Pista: En un archivo con formato Stockholm, las secuencias son las únicas líneas que no comienzan con numeral #= ni //, la regex es: ^(?![#=|//])
O31699/88-139 EVMLTDIPRLHINDPIMKGFGMVINN..GFVCVENDE
#=GR O31699/88-139 AS ________________*____________________
//
Usar: match
, @r_str
, open
, eachline
, close
, println
or print
Opcional: chomp
In [1]:
"""Función para convertir un archivo Stockholm en FASTA (secuencia en una sola línea).
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function stockholm2fasta(sto, fas)
# COMPLETAR
end
Out[1]:
In [2]:
?stockholm2fasta
Out[2]:
In [3]:
"""Función para convertir un archivo Stockholm en FASTA (secuencia en una sola línea).
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function stockholm2fasta(sto, fas)
fh_in = open(sto, "r")
open(fas, "w") do fh_out
for line in eachline(fh_in)
m = match(r"^(?![#=|//])(\S+)\s+(\S+)", line)
if m != nothing
println(fh_out, ">", m.captures[1], "\n", m.captures[2])
end
end
end
close(fh_in)
fas
end
Out[3]:
In [4]:
stockholm2fasta("data/PF09645_full.stockholm", "data/out.fas")
Out[4]:
In [5]:
run(`cat ./data/out.fas`)
Usar PyCall para importar BioPython en Julia. Un ejemplo similar en (Bio)Python está al final de la wiki de AlignIO:
from Bio import AlignIO
input_handle = open("example.phy", "rU")
output_handle = open("example.sth", "w")
alignments = AlignIO.parse(input_handle, "phylip")
AlignIO.write(alignments, output_handle, "stockholm")
output_handle.close()
input_handle.close()
Usar: AlignIO.parse
, AlignIO.write
In [6]:
using PyCall
@pyimport Bio.AlignIO as AlignIO
"""Función para convertir un archivo Stockholm en FASTA usando BioPython.
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function py_stockholm2fasta(sto, fas)
fh_in = open(sto, "r")
open(fas, "w") do fh_out
# COMPLETAR
end
close(fh_in)
fas
end
Out[6]:
In [7]:
using PyCall
@pyimport Bio.AlignIO as AlignIO
"""Función para convertir un archivo Stockholm en FASTA usando BioPython.
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function py_stockholm2fasta(sto, fas)
fh_in = open(sto, "r")
open(fas, "w") do fh_out
alignments = AlignIO.parse(fh_in, "stockholm")
AlignIO.write(alignments, fh_out,"fasta")
end
close(fh_in)
fas
end
Out[7]:
In [8]:
py_stockholm2fasta("data/PF09645_full.stockholm", "data/py_out.fas")
Out[8]:
In [9]:
run(`cat ./data/py_out.fas`)