variables, operaciones aritméticas y strings

lo primero que vamos a ver en python son los distintos tipos de variables que existen y las operaciones aritméticas que podemos realizar con variables numéricas y manipulación de strings con variables tipo string.

#variables
integer_variable = 1
float_variable   = 1.1
string_variable  = "hola"
boolean_variable = True 
list_variables   = [1,2,3]
dict_variables   = {"jose":660234567,"Antonio":660234989}
tuplas_variables = ("hola","adios")

Los nombres que les asignamos a las variables tienen una serie de normas:

son sensibles a mayusculas y minusculas

var != Var

Las variables solo consisten en letras, numeros y el caracter “_” ​

valid name = name, _str, DNA, Sequence1
no valid name = name#, year@1



opearciones que podemos realizar con variables numericas



print("operaciones aritméticas básicas")

#suma
a = 1 + 1
print(a)

#resta
a = 2 - 1
print(a)

#multiplicación
a = 2 * 2
print(a) 

#división
a = 4 / 2
print(a) 

#cociente
a = 4 // 2
print(a) 

#resto
a = 4 % 2
print(a) 

potencia 4 elevado a 2
a= 4 ** 2
print(a) 

#estas operaciones tambien se pueden hacer usando variables

b = 5
c = 6
suma = b+c
print(suma)


Funciones y métodos con strings

+ = concatenate strings
* replicate strings
in True si el primer elemento esta en el segundo elemento
not in True si el primer elemento no esta en el segundo elemento


Ejemplos

#concatenate
my_dna = "ATG" + "CGT"
print(my_dna)

#concatenate
my_dna = "ATGGGC"
my_seq2 = "GC"
my_seq3 = my_dna + my_seq2
print(my_seq3)

# replicar strings
dna = 'atg' * 3
print(dna)

# in
seq = 'at'
print(seq in 'atgtgcg')

#not in
seq = 'at'
print(seq not in 'atgtgcg')


Indexing y slicing the strings

[x] indexing: devuelve el caracter que se localiza en la posicion x del string
[x:y] slicing: devuelve un substring desde la posicion x hasta la posicion y



#string que usaremos en el ejemplo
dna = "atgcgctagctgct"

print(dna)
"atgcgctagctgct"

#index
print(dna[0]) # recuerda que python es un lenguaje 0 based, empieza por el 0 y no por el 1
'a'
print(dna[-1]) #si es negativo empieza por el ultimo valor
't'
print(dna[-2])
'c'

#slicing
print(dna[0:3]) #inlcuye el primer valor y excluye el ultimo
'atg'

print(dna[:3]) #si omitimos el primer valor por deafult usa 0
'atg'

print(dna[3:]) # omitir el segundo valor imprime toda la cadena desde el primer indice hasta el final
'cgctagctgct'

print(dna[::-1]) #cambia el sentido del string ahora empieza por el final
'tcgtcgatcgcgta'


Funciones y métodos utiles para strings

Un método es como una función, pero en vez de estar accesible para cualquier tipo de variable en python los métodos estan asociado a un tipo particular de datos (float, integer,string)

los metodos van seguidos de las variables por (“.”) y acaban en paréntesis ().

variable.metodo()



Veamos ahora algunas funciones y métodos esenciales para operar con strings

La función len() retorna la longitud de un string

dna = "atgcgctagctgct"
print(len(dna))


Los métodos upper() and lower() para pasar a mayusculas y minusculas

print(dna.upper())
'ATGCGCTAGCTGCT'

print(dna.lower())
"atgcgctagctgct"


El método replace(x,y) toma dos argumentos, remplaza el primer string (x) por el segundo string(y)

print(dna.replace("a","G"))
'GtgcgctGgctgct'


El método count(x) cuenta el numero de ocurrencias del string x

print(dna.count("a"))
2 


El método find(x) busca el string x y te devuleve la posicion del index de dicho string

print(dna.find("ta"))
6


Concatenation de distintos tipos de datos

Una de las ventajas que tiene python sobre otros lenguajes es que no necesitamos especificar que tipo de datos contiene una variable al inicializarla, basta con asignarle ese el dato y Python ya sabe que tipo de dato es. Como es lógico, Python no va a permitir que sumemos un numero con un string, o una lista con número, o un diccionario con un string. Hay que cosas que podemos hacer y otras para las que existen métodos que ya veremos mas adelante. Por ejemplo en una lista de numeros [1,2,3] no podemos sin mas concatenar otro numero usando el signo “+”, existe un método para eso, append().

Ahora vamos a ver tres funciones básicas que vamos a necesitar a la hora de trabajar con datos numéricos y strings.



la funcion str() convierte cualquier tipo de datos a string

numero = 1
print(string(numero))
'1'


la funciones int() y float() convierte numeros de integers a float y viceversa

numero = 1.1
print(int(numero))
1

numero = 1
print(float(numero))
1.0


Antes de concatenar un numéro (integer o float) con un string, será necesario transformar los números a string, pero al revés no es posible (por lógica). Es decir si queremos imprimir en pantalla el resultado de un script uniendo texto y un entero, dicho texto contendrá un string y un resultado numérico, que tendra que estar insertado en el texto como un string, veamos un ejemplo:

#edad.py
edad = 15 
nombre = "Joaquin"

#concatemos ambas variables con otro string para generar el mensaje
mensaje = "hola mi nombre es" + nombre +" y tengo " + edad

#imprimimos en pantalla. En python se usa la funcion print()
print(mensaje)


si ahora intentamos correr este script de python:

~ python edad.py
Traceback (most recent call last):
  File "edad.py", line 6, in <module>
    mensaje = "hola mi nombre es " + nombre +" y tengo " + edad
TypeError: cannot concatenate 'str' and 'int' objects


Obtenemos un error. Como vemos Python es bastante mas informativo que Bash. Nos está diciendo que no podemos concatenar dos tipos de objetos distintos un string y un integer. Bueno no pasa nada esto tiene fácil solución:

#edad.py
edad = str(15) #transformamos 15 en un string '15' 
nombre = "Joaquin"

#concatemos ambas variables con otro string para generar el mensaje
mensaje = "hola mi nombre es " + nombre +" y tengo " + edad

#imprimimos en pantalla. En python se usa la funcion print()
print(mensaje)


y ahora:

~ python edad.py
hola mi nombre es Joaquin y tengo 15




manipulando archivos

A la hora de manipular archivos en python usaremos dos funciones que son esenciales para llevar a cabo esta tarea. La función open() y la funcion read().

imaginemos el siguiente archivo de texto denominado dna.fasta:

>seq1
atagatagatagat

si quisieramos abrir el archivo, guardar en una variable su contenido e imprimir dicha variable, podríamos hacer el siguiente script read_file.py:

#almacenamos en una variable tipo string el path del archivo
file = "dna.txt"

#ejecutamos la función open para abrir el archivo y almacenarlo en la variable open_file 
open_file = open(file,"r")

#ahora leemos el contenido del archivo y lo almacenamos en file_content
file_content = open_file.read()

#finalmente imprimimos el contenido del archivo en pantalla
print file_content

si ahora ejecutamos el script:

~ python read_file.py
>seq1
atagatagatagat

La función open(archivo, opciones), vemos que tiene dos argumentos, el primero es el archivo sobre el que vamos a operar y el segundo argumento es la acción que vamos a hacer sobre el archivo. En nuestro caso hemos usar 'r' read para leer un arhivo, pero mas adelante veremos que podemos usar la opción 'w' write para crear y escribir un archivo. Esta función es el eje angular de Python para leer o escribir archivos.

importante read() es un método, y como ya hemos comentado antes, los métodos son funciones específicas para cierto tipo de objetos. En este caso la función read() solo puede usarse con objetos que sean archivos. Si lo intentamos usar con un string obtendremos un error, veamoslo directamente en python ( recuerda para entrar en python solo tienes que escribir python en terminal y para salir escribir exit()):

>> my_dna = "atgc"
>> fna_content = my_dna.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'read'


archivo no encontrado

imaginemos que intentamos arbir un archivo directamente en el prompt de python y nos ocurre lo siguiente:

>> my_file = open("archivo.txt","r")
IOError: [Errno 2] No such file or directory: 'archivo.txt'

Esto quiere decir que o bien no hemos escrito bien el archivo, o que no esta en la ubicación que hemos escrito. Si traducimos el mesaje pone Input/Output Error: Error numero 2 No existe ese archivo o directory : archivo.txt . Como vemos los mensajes de Python son realmente informativos y útiles.



La función open() y la escritura de archivos

Crear y almacenar datos en un archivo de texto es realmente facil en Python utilizando las funciones open() y el método write(). Utilizaremos open() para crear un archivo y permitir su escritura, para esta tarea open() puede tomar como segundo argumento dos opciones:



  • w write para escribir un archivo. Crea un archivo nuevo y lo escribe.
  • a append para añadir lineas o strings al final de un archivo existente

Recuerda que r lo usaremos para abrir y leer archivos

my_file = open("out.txt", "w") #creamos un archivo en modo escritura
my_file.write("Hello world") # utilizamos el metodo write() para escribir en un archivo


Luego utilizaremos el método write() que permite insertar o escribir texto en un archivo que haya sido creado con la función open() en modo w o a . Write funciona exactamente igual que print(), solo que en vez de imprimir el texto en terminal lo va a escribir en un archivo de texto. Eso si al usar write() trendremos que especificar cuando escribamos un string si queremos añadir un salto de linea o no “\n”.



veamos un ejemplo para entender todo esto mejor con el script write_python.py :

my_file = open("out.txt", "w") #creamos un archivo en modo escritura

# write "TTGC"
my_file.write("ATGC".replace('A', 'T'))

# write "atgc"
my_file.write("ATGC".lower())

seq1 = "atgc"
seq2 = "tgggc"
# write contents of my_variable
my_file.write(seq1+seq2)


veamos el archivo out.txt

~ cat out.txt
TTGCatgcatgctgggc

como podemos ver cada vez que hemos ejecuta write() en el archivo hemos concatenado, los strings. Esto ocurre porque no hemos separado cada string que ha entrado en el archivo con un new line “\n”.

my_file = open("out.txt", "w") #creamos un archivo en modo escritura

# write "TTGC"
my_file.write("ATGC\n".replace('A', 'T')) # introducimos en el string el caracte new line

# write "atgc"
my_file.write("ATGC\n".lower()) # introducimos en el string el caracte new line

seq1 = "atgc"
seq2 = "tgggc"
# write contents of my_variable
my_file.write(seq1+seq2+"\n")

si ahora corremos el script:

~ cat out.txt
TTGC
atgc
atgctgggc


cerrando los archivos

No vamos a entrar en detalle, pero en Python es importante cerrar los archivos una vez hemos terminado de manipularlos, es importante sobre todo por cuestiones de memoria. Para cerrar una archivo lo unico que tenemos que hacer es usar el metodo close(). Siguiendo con el ejemplo anterior solo tendríamos que añadir al final del script write_python.py:

my_file = open("out.txt", "w") #creamos un archivo en modo escritura

# write "TTGC"
my_file.write("ATGC".replace('A', 'T'))

# write "atgc"
my_file.write("ATGC".lower())

seq1 = "atgc"
seq2 = "tgggc"
# write contents of my_variable
my_file.write(seq1+seq2)

#close the file
my_file.close()