460 likes | 645 Views
Manejo de archivos en Perl. Tipos de archivo:. Archivos de texto es una secuencia de líneas de caracteres, cada línea de caracteres es separada por marcas de fin de línea, los caracteres son todos aquellos que están incluidos en el código ASCII.
E N D
Tipos de archivo: Archivos de texto es una secuencia de líneas de caracteres, cada línea de caracteres es separada por marcas de fin de línea, los caracteres son todos aquellos que están incluidos en el código ASCII. Archivo binario codificada en forma binaria para el propósitos de almacenamiento
Programa en PERL Acceso a archivos en Perl. Para que Perl pueda manipular un archivo utiliza lo que es denominado "filehandle”, “manejador” ó “file descriptor", este "filehandle" es una referencia hacia el archivo en cuestión. Archivo de DATOS S.O.
Lectura Escritura Agregar Formas de acceder a archivos:
Sintaxis apertura de archivos: open(MANEJADOR, "modo de acceso + nombre de archivo"); El manejador es el nombre de la conexión entre el programa En Perl y el exterior. Cuando necesitemos acceder al exterior lo haremos a través del manejador dentro del programa.
Ejemplos apertura de archivos Apertura para crear archivo: Open(ARCHIVO, ”> resultados.txt"); Apertura para leer archivo: Open(ARCHIVO, ”<resultados.txt"); Open(ARCHIVO, ”resultados.txt"); Para anexar datos: Open(ARCHIVO, ”>>resultados.txt");
Ejemplo para crear un archivo nuevo llamado llamado datos.dat : open(ARCH, ”>datos.dat"); Si existe un archivo con el mismo nombre en el directorio donde se va a crear el archivo, el contenido de ese archivo se borrara y no será posible su recuperación.
ARCH ARCH open(ARCH, ”>datos.dat"); Sintaxis para agregar datos : print MANEJADOR “ texto a agregar al archivo”; Ejemplo: print ARCH“agregando linea \n”; print ARCH“agregando linea \n”;
Al final de la utilización el archivo se cierra mediante el operador close. Sintaxis: close (MANEJADOR); Ejemplo completo: #!/usr/bin/perl #ejem-4-01.pl open (ARCH,">datos.dat"); print "Ejemplo de escritura en archivo\n"; print ARCH "Esta es la primera linea agregada al archivo \n"; print ARCH "Esta es la primera segunda agregada archivo \n"; close (ARCH);
Ejemplo para leer el archivo recien creado llamado datos.dat : open(ARCH, ”<datos.dat"); open(ARCH, ”datos.dat"); ARCH Una vez iniciado el archivo mediante la rutina open, el “manejador” de archivos permite acceder a los datos mediante el operador <>. Sintaxis: <MANEJADOR>; $linea_leida=<ARCH>;
Ejemplo completo: #!/usr/bin/perl #ejem-4-02.pl open (ARCH,"datos.dat"); print "Ejemplo de lectura de archivos\n"; $linea=<ARCH>; print "LINEA 1 : $linea \n"; $linea=<ARCH>; print "LINEA 2: $linea \n"; close (ARCH);
Agregar Ejemplo para agregar datos a un archivo existente creado anteriormente datos.dat : open(ARCH, ”>>datos.dat");
Ejemplo completo: #!/usr/bin/perl #ejem-4-03.pl open (ARCH,">>datos.dat"); print "Ejemplo agregando datos a un en archivo\n"; print ARCH "Vamos a agregar una lina mas \n"; print ARCH "Agregamos otra y cerramos el archivo \n"; close (ARCH);
¿Que pasa si el archivo no existe? !/usr/bin/perl #ejem-4-02.pl open (ARCH,"datos1.dat"); print "Ejemplo de lectura de archivos\n"; $linea=<ARCH>; print "Primera linea leida : $linea \n"; $linea=<ARCH>; print "Segunda linea leida : $linea \n"; close (ARCH);
Operadores de Archivo: estos operadores se emplean para verificar en el sistema operativo los permisos de un archivo, o su naturaleza de ejecución, etc. A continuación se muestra los diferentes operadores: -r : indica si el archivo tiene permiso de lectura. -W : indica si el archivo tiene permiso de escritura. -T : indica si el archivo es de tipo texto. -e : indica si el archivo existe. -z : indica si el archivo tiene tamaño 0. -s : indica si el archivo es mayor que 0. -f : indica si el archivo es plano. -d : indica si se trata de un directorio. -M : indica el número dias después de la última modificación -B : indica si el archivo es binario. -t : indica si el archivo esta abierto en un terminal.
Ejemplo de apertura de archivo usando operadores: #!/usr/bin/perl #ejem-4-04.pl $nom_arch="datos.dat"; if (-e "$nom_arch"){ open (ARCH,$nom_arch); print "Ejemplo de lectura de archivos\n"; $linea=<ARCH>; print "LINEA 1 : $linea \n"; $linea=<ARCH>; print "LINEA 2: $linea \n"; close (ARCH); }else{ print "No existe el archivo $nom_arch\n"; }
Ejemplo de apertura de archivo usando operadores: #!/usr/bin/perl #ejem-4-05.pl $nom_arch="datos.dat"; if (-e "$nom_arch"){ if (-r $nom_arch){ open (ARCH,$nom_arch); print "Ejemplo de lectura de archivos\n"; $linea=<ARCH>; print "LINEA 1 : $linea \n"; $linea=<ARCH>; print "LINEA 2: $linea \n"; close (ARCH); }else{ print "El archivo $nom_arch si existe pero no tiene permisos de lectura \n"; }#fin if }else{ print "No existe el archivo \n"; }#fin otro if
Otra forma común de terminar un programa al producirse un error al abrir el archivo es mediante la función die, die Toma como argumento una cadena y sale inmediatamente del programa viendo esta cadena como mensaje de error. Ejemplo para salir del programa enviando Un mensaje de error se utilizaría como sigue : open(ARCH, ”>datos.dat")||die “no puedo abrir archivo”;
Ejemplo de apertura de archivo utilizando die: #!/usr/bin/perl #ejem-4-06.pl open (ARCH,"datos.dat")||die "no puedo abrir archivo datos.dat"; print "Ejemplo de lectura de archivos\n"; $linea=<ARCH>; print "LINEA 1 : $linea \n"; $linea=<ARCH>; print "LINEA 2: $linea \n"; close (ARCH);
Lectura secuencial de un archivo mediante la estructura de control while: #!/usr/bin/perl #ejem-4-07.pl $nom_arch="datos.dat"; open (ARCH,"$nom_arch")||die "No puedo abrir archivo $nom_arch\n"; print "Ejemplo de lectura de archivos\n"; while($linea=<ARCH>){ chomp $linea; print "LINEA : $linea \n"; } close (ARCH);
Lectura secuencial de un archivo mediante la estructura de control foreach: #!/usr/bin/perl #ejem-4-08.pl $nom_arch="datos.dat"; open (ARCH,"$nom_arch")||die "No puedo abrir archivo $nom_arch\n"; @lista=<ARCH>; print "Ejemplo de lectura de archivos\n\n"; print "Primero imprimimos lista completa\n"; print "@lista"; print "\nAhora recorremos la lista \n\n"; foreach $linea (@lista){ chomp $linea; print "LINEA : $linea \n"; } close (ARCH);
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El power point De micosoft Valor de $linea
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “Este es un archivo”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “de texto solo”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “Utilizado para”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “Demostrar como”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “Funciona de mal”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “El pouer point”
$linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; $linea=<ARCH>; Este es un archivo de texto solo Utilizado para Demostrar como Funciona de mal El pouer point De micosoft Valor de $linea “De micosoft”
Ejercicio 1: Leer 10 nombres del teclado y grabarlos en un archivo de texto. Ejercicio 2: Leer el archivo de texto generado anteriormente Ejercicio 3: Leer 5 nombres del teclado y anexarlos al archivo generado anteriormente.
# Abrir una consola y ejecutar los siguientes comandos: * ftp * open ftp.ncbi.nih.gov # Como login, usar "anonymous" # Como password, usar su direccion de correo # Entraremos en el directrio raiz del servidor FTP del NCBI. # Seguimos ejecutando comandos: * ls (para hacer un listado) * cd genomes * cd Bacteria * ls * get README (para bajarnos un fichero con información sobre el directorio) * cd Nombre_bacteria_descargar * ls # Aparecen varios ficheros, cuyos nombres contienen el número de acceso del genoma NC_000???. * get NC_000???.gbk (para bajarse la entrada completa en formato GenBank). * get NC_000???.fna (para bajarse la secuencia en formato FASTA). * get NC_000???.ptt (para bajarse una tabla con las coordenadas de todas las ORFs, la Protein Translation Table). * get NC_000???.faa (para bajarse un fichero con la traducción de todas las ORFs, en formato FASTA). # bye (para cerrar la conexion) # Los ficheros que nos hemos bajado debieran estar en nuestro directorio personal y estar en formato texto
Mediante un navegador, en la barra de direcciones colocar la direccion del servidor de ftp de NCBI : ftp://ftp.ncbi.nih.gov Ingresar en ->genomas ->Bacteria ->Escherichia_coli_K12 Descargar : NC_000913.faa (Genes traducidos) NC_000913.gbk (Genoma con anotaciones)
Ejemplo extraer la secuencia de nucleótidos Del genoma de Ecoli_k12: #!/usr/bin/perl #!/usr/bin/perl #ejem-4-09.pl open (ARCH,"Ecoli_k12.gbk")||die "No puedo abrir archivo \n"; open (ARCHSAL,">Ecoli_k12.genoma")||die "No puedo generar Ecoli_k12.genoma\n"; $bandera=0; while ($linea=<ARCH>){ if($linea =~ "ORIGIN"){ $bandera=1; } if($bandera==1){ print "$linea"; print ARCHSAL "$linea"; } } close (ARCH); close (ARCHSAL)
Ejercicio : Modificar el programa anterior para que extraiga en una sola cadena el genoma completo de E_coli_k12
Ejemplo extraer la secuencia de nucleótidos Del genoma de Ecoli_k12: #eje_4_09-2.pl open (ARCH,"Ecoli_k12.gbk")||die "No puedo abrir archivo \n"; open (ARCHSAL,">Ecoli_k12.genoma")||die "No puedo generar Ecoli_k12.genoma\n"; $bandera=0; while ($linea=<ARCH>){ if($linea =~ "ORIGIN"){ $bandera=1; } if($bandera==1){ print "$linea"; @arr=split (/\s+/,$linea); print "@arr"; if (!($linea =~ "ORIGIN")){ print ARCHSAL "$arr[2]$arr[3]$arr[4]$arr[5]$arr[6]$arr[7]"; } } } close (ARCH);
Ejemplo leer un archivo en formato fasta, obtener Contenido de GCs de cada secuencia: Un archivo en formato fasta consiste en líneas que inician con el símbolo “>” seguidas por la descripción de la secuencia, las siguientes líneas contienen la secuencia de nucleótidos o aminoácidos, así sucesivamente con las siguientes descripciones y secuencias. Un ejemplo de formato fasta seria: >Nombre de la secuencia Gcgagcgcgccgaggtgtgcacgcatgtagcatgctagctgtcgagagcactgacgtacgtacgtag Ccggccgagatcaggcgatgcatgcgcagggagcagcgagcgacgagcacagcatgctagctagat gcatgctacgtaggcagccgccgagagacgatggagctgc
Ejemplo : Del archivo fasta del genoma de Ecoli_k12 que contiene los genes traducidos, extraer la descripción de los genes. #!/usr/bin/perl #ejem-4-10.pl open (ARCH,"Ecoli_k12.faa")||die "No puedo abrir archivo Ecoli_k12.faa\n"; while ($linea=<ARCH>){ if($linea =~ ">"){ print "$linea"; } } close (ARCH); print "Total de genes $cont \n";
Ejercicio para desarrollar en clase: Modifique el ejemplo anterior para que se impriman todos los genes con función hipotética (predicted ), cuente en total cuantos son.
#!/usr/bin/perl #ejem-4-10-2.pl open (ARCH,"Ecoli_k12.faa")||die "No puedo abrir archivo Ecoli_k12.faa\n"; while ($linea=<ARCH>){ if(($linea =~ ">")&&($linea =~ "predicted")){ print "$linea"; } } close (ARCH); print "Total de genes $cont \n";
Mediante el uso del programa blastn, se realizó la busqueda de la secuencia del gen nagB (Glucosa-6-fosfato-deaminasa) el resultado se presenta en el archivo anexo; obtener las 5 proteínas con evalue mas alto (las 5 mas parecidas).
#ejem-4-12.pl $nomarch="blastnnagb.txt"; open(ARCH,"$nomarch")||die "No puedo abrir archivo $nomarch\n"; $flag=0; $cont=0; while($linea=<ARCH>){ if($linea =~ "Sequences producing significant alignments:"){ $flag=1; $linea=<ARCH>; $linea=<ARCH>; } if ( ($flag==1)and (cont<=5)){ push (@lista,$linea); $cont++; } if($cont==5){ $flag=0; } } close (ARCH); print "Los elementos con evalue mas altos son:\n"; foreach $elemento (@lista){ print "$elemento "; }
Tarea Desarrolle un programa que del archivo fasta del genoma de Ecoli_k12 obtenga el total de aminoácidos por gen, y guarde en otro archivo el gi (identificador del gen) , total de aminoácidos, así como también calcule el promedio de aminoácidos por gen del genoma completo.
#!/usr/bin/perl #ejem-4-12.pl $nomarch="blastnnagb.txt"; open(ARCH,"$nomarch")||die "No puedo abrir archivo $nomarch\n"; $flag=0; $cont=0; while($linea=<ARCH>){ if($linea =~ "Sequences producing significant alignments:"){ $flag=1; $linea=<ARCH>; $linea=<ARCH>; } if ( ($flag==1)and (cont<=5)){ push (@lista,$linea); $cont++; } if($cont==5){ $flag=0; } } close (ARCH); print "Los elementos con evalue mas altos son:\n"; foreach $elemento (@lista){ print "$elemento "; }
Ejercicio acerca del blast 1: Modificar el ejemplo anterior para obtener las Proteínas mas parecidas que no pertenezcan al genoma de Ecoli Ejercicio acerca del blast 2: Modificar el ejemplo anterior para obtener las proteínas con un evalue entre 6e-74 y 2e-42 que no Pertenezcan al genoma de Ecoli