Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Repaso
1. Errores: En la programación tenemos dos tipos de errores: sintácticos y lógicos a estos
últimos en python se les conoce como excepciones.
2. Anticipar los posibles errores lógicos es a lo que se le llama validación de un programa.
3. Para validar un programa se tienen los siguientes tres métodos:
Codificación del error
A través de la sentencia assert
A través de la estructura: try-except
4. La estructura try-except es la más completa de las tres. Tiene una escencia jerárquica.Esto
es, es necesario escribir el anidamiento considerando primero los casos más específicos
(al fondo de la jerarquía) e ir subiendo. Por supuesto, en este caso no es necesario abordar
el error que contiene a los de menor jerarquía debido a su rendundancia.
5. Es posible pasar una cantidad de argumentos indefinida a un programa, para ello es
necesario el uso de la sentencia *args. Este operador (* mal llamado indirección por el
profe :) ) convierte a una tupla lo que sea que almacene.
6. De forma similar es posible pasar una cantidad de argumentos por nombre de manera
indefinida a un programa, para ello es necesario el uso de la sentencia **kwargs. Este
opera convirtiendo a un diccionario los distintos argumentos.
Uso de kwargs
**kwargs permite pasar variables por nombre de manera indiscriminada a una función. Se
recomienda su uso cuando se quiere realizar una función con paso por nombre en funciones.
Para ello, se crea un diccionario donde el nombre de la variable es la clave y su respetivo valor
es, propiamente su valor.
def usokwargs(**kwargs):
print("Los argumentos pasados por nombre son:\n===================
===== ")
for key, valor in kwargs.items():
print("{0} = {1}".format(key, valor))
Es posible utilizar los operadores de indirección * y ** para (en Python se les llama solo
operadores * o **) para desempaqueter los elementos que componen una secuencia
In [3]: 1 a=(1, 2, 3, 4, 5, 6, 7, 8)
2 def num_sum(*args):
3
4 sumatoria=0
5 for entrada_i in args:
6 sumatoria+=entrada_i
7 return sumatoria
8
9 num_sum(*a) # Pasamos todos los argumentos
10 # num_sum(*a) es equivalente a num_sum(a[0], a[1], a[2], a[3], a[4], a[5]
Out[3]: 36
In [ ]: 1 a="Hola Mundo"
2 def num_sum(*args):
3 for indice, entrada_i in enumerate(args):
4 if indice==0 :
5 sumatoria=entrada_i.upper()
6 continue # Este segmento le dice al ciclo que vaya dire
7 sumatoria+=entrada_i.upper()
8 return sumatoria
9
10 num_sum(*a) # Pasamos todos los argumentos
11 # num_sum(*a) es equivalente a num_sum(a[0], a[1], a[2], a[3], a[4], a[5]
Funciones anónimas
Las funciones anónimas, son funciones que no tienen un nombre. Por ello, suelen utilizarse en
programas cortos. Las funciones anónimas se definen usando la palabra reservada lambda. La
sintaxis se muestra a continuación:
24
27
¿Es posible crear una función lambda que sume un número indefinido de argumentos? Sí, vea
el siguiente ejemplo:
Out[9]: 45
Esencialmente, estas tres funciones permiten el aplicar código a través de iterables (listas,
tuplas). map y filter no necesitan ser importadas ya que viene con el módulo builtins. Sin
embargo, reduce necesita ser importado, ésta función se encuentra en el módulo functools.
Map
map(func, *iterables)
La función map regresa un objeto de la clase map, el cual es un generador. Para convertir tal
resultado en una lista se utiliza la función list:
list(map(func, *iterables))
In [ ]: 1 #**Utilizando map y list comprehensions genere una lista con la media por
2 #renglón de una matriz aleatoria A**
3
4
5
6
Filter
Mientras que map() pasa cada el elemento del iterable a través de una función y regresa el
resultado de todos los elementos transformados al pasar por la función, la función filter(),
requiere que la función regrese un valor de tipo boleano (True o False). filter() pasa esta
función por cada elemento del iterable y regresa aquellos con valor True. Por ello, se dice que
"filtra" todos aquellos que no cumplen la condición. La sintaxis es como sigue:
filter(func, iterable)
Resumiendo:
In [39]: 1 datos = [66, 90, 68, 59, 76, 60, 88, 74, 81, 65]
2
3 def aprobado(datos):
4 return datos > 70
5
6 pasaron = list(filter(aprobado, datos))
7 print(pasaron)
In [54]: 1 #
2 #
3 #
4 #
5 f2=lambda n: n>70
6 f1=lambda datos: list(filter(f2, datos))
7 print(f1(datos))
Reduce
La función reduce aplica una función de dos argumentos a un iterable, esto de forma
acumulativa. Tiene además la opción de empezar con un argumento inicial. La sintaxis es:
reduce(func, iterable[, initial])
Donde func es la función que actuará sobre cada elemento del iterable y el inicial es el valor
opcional con el cual se incrementaría virtualmente el arreglo en la primera posición.
En resumen:
1. Escritura de un archivo
En el manejo de archivos, las dos tareas más básicas son las de lectura y escritura.
archivo=open("Mi_archivo1.txt", "w")
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-6-e7b94809bc9f> in <module>
8
9 archivo.close()
---> 10 archivo=open("http://localhost:8888/edit/Downloads/Mi_archivo1.tx
t","w")
11 archivo.close()
12
2. Lectura de un archivo
La sintaxis en la lectura del archivo es como sigue :
Archivo=open("Mi_archivo1.txt", "r") #Permiso de lectura
linea=Archivo.readline() # Lee el archivo
print(linea) #Muestra la primera línea del ar
chivo
Archivo.close() #Cierra el archivo
Tambén es posible leer el contenido completo de un archivo, para ello se utliza el método read:
Es posible acceder a todas las líneas de un archivo iterandolo. Esto puede hacerse de la
siguiente forma:
Archivo=open("LasRuinasCIrculares.txt", "r")
for lineas in Archivo: #Itera mediante el ciclo for
print(lineas)
Archivo.close()
Las cadenas de caracteres admiten el mismo manejo que las listas. Los siguientes ejercicios
muestran algunos ejemplos
Ejercicios
1. Haga una copia del archivo LasRuinasCirculares.txt, al archivo generado llámelo copia.txt
2. Haga un archivo donde escriba el número de línea y el número de carácteres de la línea.
Ambos separados por ,
3. ¿Qué realiza el siguiente programa?
Archivo=open("LasRuinasCirculares.txt", "r")
Archivo2=open("LasRuinasCIrculares2.txt", "w")
for i in Archivo:
Archivo2.write(i[::-1])
Archivo.close()
Archivo2.close()
‘r’ – Modo de lectura, es usado cuando solo se quiere acceder al contenido sin modificar.
‘w’ – Modo de escritura, es usado cuando se quiere escribir un archivo. Si el archivo ya
existía, el anterior será reemplazado por el creado más recientemente.
‘a’ – Modo de extensión. Esta modalidad se usa para agregar contenido al final del archivo.
Todo lo que se escriba se agregará en una nueva línea al final del archivo original
‘r +’ – Modo de lectura y escritura, este modo es el de uso básico para leer y escribir en un
archivo.
'w +'- Modo de lectura y escritura, este modo es el uso básico para leer y escribir en un
archivo.
In [ ]: 1 # Escritura de un archivo
2
3
4
5
6
Como en el caso de las listas y tuplas es posible saber la longitud del dato tipo string con el
comando len.
Confirmemos que estamos ante otro tipo de estructura de datos, para comprobarlo aplique el
comando type a una línea del archivo: type(linea)
|u | n| a|--| p| a| l| a| b| r| a|
|0 | 1| 2|3 | 4| 5| 6| 7| 8| 9| 10|
In [56]: 1 # En este código declaramos una cadena de caracteres:
2 cadena="Hola Mundo"
3 print("La variable cadena es de tipo: ",type(cadena))
4 print(cadena)
5 print(cadena[1])
6 print(cadena[4:6])
7 print(cadena[0:4])
8
In [58]: 1 # Si la cadena se comporta de manera similar a una lista, qué hace el sigu
2 cadena2=cadena[0:4]+" a todos"
3 print(cadena2)
Hola a todos
Sentencia in
Con el operador in es posible saber si una cadena contiene una determinada subcadena o un
carácter concreto. Véase el siguiente ejemplo:
cadena="Programar es divertido"
print("P" in cadena)
print("p" in cadena)
Pruebe ahora considerando una palabra en una oración. Por ejemplo, busque si se encuentran
las palabras: Rico, cielo, ahora en la siguiente oración:
find devuelve la primera posición en donde encuentra el substring dentro del string.
Alternativamente, el método rfind nos devuelve la última posición donde encuentra el substring.
También admite parámetros de índice de inicio y fin de búsqueda. Un ejemplo :
In [ ]: 1
In [10]: 1 #Ejercicio: Escriba un código que cuente cuántas veces aparece la palabra
2
3
4
Método split
El método split genera una lista de los elementos separados por algún substring o caracter.
Ejemplo:
cadena_coma="1,3,4,5,7,8,9,10"
cadena_espacio="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"
cadena_tab="1\t2\t3\t4\t5\t6\t7"
datos_coma=cadena_coma.split(",")
datos_espacio=cadena_espacio.split(" ")
datos_tab=cadena_tab.split("\t")
print(datos_coma)
print(datos_espacio)
print(datos_tab)
Se usa una expresión como la siguiente "string con formato" % valores. Veamos ejemplos
In [19]: 1 print ("Entero con 5 cifras, espacios por delante %5d" % 11) # saca tre
2 print ("Entero con 5 cifras, ceros por delante %05d" % 11) # saca 000
3 print ("Flotante con 2 decimales %.2f" % 12.34567) # saca 12.
4 print ("Flotante con 2 decimales, diez cifras, espacios por delante %10.2f
5 print ("Flotante con 2 decimales, diez cifras, ceros por delante %010.2f" %
6
In [ ]: 1
In [ ]: 1
https://docs.python.org/3/library/stdtypes.html#string-methods
(https://docs.python.org/3/library/stdtypes.html#string-methods)
In [ ]: 1
Los archivos csv son unos de los formatos más utilizados. Esto es debido a su facilidad de uso
y a que cualquier hoja de cálculo puede usar ese formato.
In [18]: 1 # Ejemplo de carga de un archivo:
2 import csv as csv
3 total_len = 0
4 with open("Datos.csv") as fh:
5 next(fh)
6 for n, line in enumerate(fh):
7 data = line.split("\t")
8 data=[float(i) for i in data ]
9 data2.append(data)
10 print(data2)
11
import pickle
pickle.load(open(’spdict.data’,’rb’)) # abre el archivo creado celda
s arriba.
El método load requiere la variable que maneja el archivo a abrir. Debe notarse que los
permisos son "rb" indicando que es de lectura binaria y "wb" indicadon que es la escritura d un
archivo binario. Si el archivo no es manipulado con estos permisos de archivo binario, resultará
en un error, y que python tratará de convertir los válores a Unicode.y to convert it to Unicode
and will fail.
0: Es el original fácilmente legible por humanos. Es compatible con las primeras versiones
de Python.
1: Es el formato binario antiguo, es compatible con versiones antiguas de Python.
2: Es mucho más eficiente en el codificado y compresión ademas de agregar nuevas
clases. Compatible con python 2.x
3: Es el default, tiene un soporte explícito para objetos binarios y no es compatile con
Python 2.x. Es el más recomendado si el uso será únicamente en las versiones de
Python3.x
4: Disponible a partir de la versión 3.4. Este protocolo soporta objetos más grandes que los
otros protocolos, además permite la conversión a pickle de más estructuras de datos que
los anteriores.
import os
os.getcwd()
os.chdir(’..’)
os.getcwd()
3. listdir(dir): Devuelve una list conteniendo los nombres de las entradas en el directorio.
Para saber si un nombre regresado por listdir es un archivo o una carpeta (directorio), use
el comando: os.path.isdir() o os.path.isfile().
import os
archivos=os.listdir(os.getcwd())
print("Los elementos en este directorio son: \n", archivos)
print("\n¿Es ", archivos[1], "una carpeta?: ", os.path.isdir(archivos
[1]))
print("¿Es", archivos[1], "un archivo?: ", os.path.isfile(archivos
[1]))
4. remove(file): Borrael archivo file. El archivo debe existir y se deben tener permisos de
escritura sobre él.
os.remove("borrame.txt")
os.mkdir(’/home/sb/processed-seqs’)
os.path.join(os.getcwd(), "images")
os.path.exists(os.path.join(os.getcwd(), "images"))
9. path.split(path): Devuelve una tupla separando el nombre del archivo o directorio al final
del resto de la ruta.
os.path.split(’/home/sb/seqs/ms2333.ab1’)
(’/home/sb/seqs’, ’ms2333.ab1’)
10. path.splitext(path): Exrae la extensión de un archivo. Este método devuelve una tupla con
la extensión adquirida mediante un punto.
os.path.splitext(’/home/sb/seqs/ms2333.ab1’)
(’/home/sb/seqs/ms2333’, ’.ab1’)
In [17]: 1 import os
2 archivos=os.listdir(os.getcwd())
3 print("Los elementos en este directorio son: \n", archivos)
4 print("\n¿Es ", archivos[1], "una carpeta?: ", os.path.isdir(archivos[1])
5 print("¿Es", archivos[1], "un archivo?: ", os.path.isfile(archivos[1]))
In [ ]: 1 # Práctica, Haga una función que guarde una matriz aleatoria de 200 renglon
2 # Una vez que lo haya generado, lea el archivo utilizando la función loadtx
3