2 Unidad2 ModulosUtilidad
2 Unidad2 ModulosUtilidad
Módulos de Utilidad
Manual del Estudiante
1
Unidad 2: Módulos y Librerías Estándar
Módulos de Python
Al iniciar la terminal de Python tenemos disponibles de inmediato todos los tipos de datos y
funciones que hemos visto hasta ahora, pero podemos tener funcionalidades adicionales
importado módulos de Python, ya sean de la librería estándar o externas.
import sys
Variables
sys.maxsize:Informa el tamaño del puntero de la plataforma y eso limita el tamaño de las
estructuras de datos de Python, como cadenas y listas. A partir de la versión 3 de Python no
está disponible la variable maxint que retornaba el número positivo entero mayor, soportado
por Python.
sys.maxsize
9223372036854775807
sys.path: Es una lista de directorios/carpetas donde Python busca los módulos cuando
realizamos un import. Ya que es una lista podemos agregar y quitar elementos.
sys.path
2
Unidad 2: Módulos y Librerías Estándar
C:\\Users\\admin\\Desktop\\My Curso
Python\\EntornoVirtual\\Ejercicios\\Ejemplos Clase',
'C:\\Users\\admin\\Anaconda3\\envs\\AAUT1\\python37.zip',
'C:\\Users\\admin\\Anaconda3\\envs\\AAUT1\\DLLs',
'C:\\Users\\admin\\Anaconda3\\envs\\AAUT1\\lib',
'C:\\Users\\admin\\Anaconda3\\envs\\AAUT1',
…
sys.platform: retorna la plataforma sobre la cual se está ejecutando el intérprete.
sys.platform
'win32'
sys.version: Es una cadena que nos indica la versión de intérprete que estamos utilizando.
print sys.version
'3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]'
Funciones
sys.exit(): permite terminar la ejecución del script devolviendo un valor.
sys.getdefaultencoding(): Retorna la codificación de caracteres por defecto
sys.getdefaultencoding()
'utf-8'
sys.getfilesystemencoding()
'utf-8'
3
Unidad 2: Módulos y Librerías Estándar
os.name: retorna el nombre del sistema operativo (posix, nt, os2, ce, java y riscos).
print(os.name)
nt
os.getcwd(): esta función retorna el directorio actual de trabajo del archivo utilizado
para ejecutar el código.
path = os.getcwd()
print(path)
C:\Users\admin\Desktop\My Curso Python
PATH_FILES = "C:\Users\admin\Projects\BigDataProject\"
os.chdir(PATH_FILES)
if os.path.isdir(PATH_IMAGES):
os.chdir(PATH_IMAGES)
else:
print("Directorio o ruta no existe\n")
os.mkdir('imagenes') # Crear la carpeta imágenes
os.chdir(PATH_IMAGES)
4
Unidad 2: Módulos y Librerías Estándar
El módulo principal es datetime, que permite trabajar con fechas y tiempo mientras que el
módulo time, ofrece métodos avanzados para tiempo, ignorando la fecha y calendar
funciones generales relacionadas a calendarios.
Una vez importamos la librería from datetime import <modulo>, tendremos acceso a los
métodos de los módulos.
Almacena internamente sólo los días, segundos y microsegundos, por ende, los argumentos
se convierten en esas unidades:
Ejemplo:
delta = timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000, # convierte a microseg (29000*1000)
minutes=5, # convierte los min a segundos (5*60)
hours=8, # convierte horas a segundos (8*3600)
weeks=2 # convierte semanas a días (2*7)
)
delta
datetime.timedelta(days=64, seconds=29156, microseconds=10)
5
Unidad 2: Módulos y Librerías Estándar
print(timedelta(days=1))
1 day, 0:00:00
Restar días:
Restar horas:
Sumar días:
timedelta(weeks=1)
datetime.timedelta(days=7)
print(timedelta(weeks=1))
7 days, 0:00:00
6
Unidad 2: Módulos y Librerías Estándar
Objeto date
Representa una fecha (año, mes y día) en un calendario idealizado, el calendario gregoriano
actual se extiende indefinidamente en ambas direcciones.
Atributos:
El día actual es 9
El mes actual es 9
El año actual es 2020
Objeto datetime
El objeto datetime es un único objeto que contiene toda la información de un objeto date y
un objeto time.
Como un objeto date, datetime asume el calendario gregoriano actual extendido en ambas
direcciones; como un objeto time, datetime supone que hay exactamente 3600*24 segundos
en cada día.
2019-02-28 10:15:00
datetime.datetime(2019, 2, 28, 10, 15)
Métodos:
datetime.today(): Retorna la fecha y hora local actual, con tzinfo None.
7
Unidad 2: Módulos y Librerías Estándar
mi_fecha = datetime.today()
print("Fecha actual: ", mi_fecha)
Fecha actual: 2020-09-09 21:08:20.012032
fecha = datetime.now()
print("Fecha actual: ", fecha)
Fecha actual: 2020-09-09 21:08:20.013029
fechautc = datetime.utcnow()
print("Fecha actual: ", fechautc)
Fecha actual: 2020-09-09 19:08:20.013029
Atributos:
o datetime.year
o datetime.month
o datetime.day
o datetime.hour
o datetime.minute
o datetime.second
o datetime.microsecond
Ejemplos:
now = datetime.today()
El día actual es 11
El mes actual es 9
El año actual es 2020
La hora actual es 16
Los minutos actuales son 12
Los segundos actuales son 52
8
Unidad 2: Módulos y Librerías Estándar
Métodos
timetuple(): Retorna una estructura (time.struct_time)
donde:
es el número de día dentro del año actual que comienza con 1 para el 1 de enero.
Ejemplo:
fecha_actual = datetime.today()
attributesInTuple = fecha_actual.timetuple()
2020
9
9
21
52
28
2
253
-1
Método strptime(): nos permite convertir una fecha en formato cadena, a un objeto
datetime.
Ejemplo:
9
Unidad 2: Módulos y Librerías Estándar
fecha_cadena = '10/9/20'
print(type(fecha_cadena))
<class 'str'>
Método strftime(): El objeto datetime tiene un método para formatear objetos de fecha
en cadenas legibles. strftime() toma un parámetro, formato, para especificar el formato de la
cadena que retornará:
Sintaxis: strftime(format)
Ejemplo:
fecha = datetime.today()
datetime.strftime(fecha,'%Y')
‘2020’
10
Unidad 2: Módulos y Librerías Estándar
Ejemplos:
fecha = datetime.now()
print("{} de {} del {}".format(fecha.strftime('%d'),
fecha.strftime('%B'),
fecha.strftime('%Y')))
13 de September del 2020
11
Unidad 2: Módulos y Librerías Estándar
fecha = datetime.now()
meses = ("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre",
"Noviembre", "Diciembre")
dia = fecha.day
mes = meses[fecha.month - 1]
año = fecha.year
print("{} de {} del {}".format(dia, mes, año))
13 de Septiembre del 2020
Las siguientes sentencias utilizan los diferentes formatos. Crea un programa Python, cópialas
y revisa los resultados obtenidos:
12
Unidad 2: Módulos y Librerías Estándar
Otros Métodos
fecha = datetime.now(timezone.utc)
Ejemplo:
fecha = datetime.now(timezone.utc)
13
Unidad 2: Módulos y Librerías Estándar
Objeto time
Un objeto time representa a una hora del día (local), independiente de cualquier día en
particular, y está sujeto a ajustes a través de un objeto tzinfo (información sobre una zona
horaria particular)
Método time(): retorna la hora como un número con punto flotante expresado en
segundos.
import time
time.time()
1600037302.6448398
time.localtime( time.time() )
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=14, tm_hour=0,
tm_min=48, tm_sec=22, tm_wday=0, tm_yday=258, tm_isdst=1)
print(time.asctime( time.localtime(time.time()) ))
Mon Sep 14 00:48:22 2020
import time
import time
from time import gmtime, strftime, strptime
14
Unidad 2: Módulos y Librerías Estándar
hora = gmtime()
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=23,
tm_min=3, tm_sec=50, tm_wday=6, tm_yday=257, tm_isdst=0)
hora.tm_hour
23
hora.tm_min
3
Donde:
Por ejemplo, "05 de Abril de 2020", en este formato internacional se escribe: 2020-04-05.
datetime.now().replace(microsecond=0).isoformat()
2020-09-14T00:14:01
datetime.now().astimezone().isoformat()
15
Unidad 2: Módulos y Librerías Estándar
2020-09-14T00:14:01.309464+02:00
timestamp = 1545730073
fecha = datetime.fromtimestamp(timestamp)
fecha = datetime.now()
timestamp = datetime.timestamp(fecha)
print("Fecha", fecha)
print("Timestamp =", timestamp)
Fecha 2020-09-14 00:36:11.872556
Timestamp = 1600036571.872556
Módulo Calendar
Este módulo te permite generar calendarios como el programa Unix cal, y proporciona
funciones útiles adicionales relacionadas con el calendario. Por defecto, estos calendarios
tienen el lunes como el primer día de la semana, y el domingo como el último (la convención
europea). Use setfirstweekday() para establecer el primer día de la semana en domingo
(6) o en cualquier otro día de la semana.
Establece el día de la semana (0 lunes y 6 domingo) para empezar cada semana, también
puede utilizar los valores MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY y
SUNDAY.
import calendar
16
Unidad 2: Módulos y Librerías Estándar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.setfirstweekday(6)
Un objeto Calendar proporciona varios métodos que se pueden utilizar para preparar los datos
del calendario para dar formato
calendar.calendar(2020)
calendar.firstweekday()
0
calendar.isleap(2020)
True
Ejemplo:
cl = calendar.TextCalendar(calendar.SUNDAY)
17
Unidad 2: Módulos y Librerías Estándar
calendario_sep = cl.formatmonth(2020, 9)
print(calendario_sep)
September 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
class calendar.HTMLCalendar(firstweekday=0)
Esta clase puede utilizarse para generar calendarios HTML. Las instancias de HTMLCalendar
tienen los siguientes métodos:
Ejemplo:
import calendar
myCal = calendar.HTMLCalendar(calendar.SUNDAY)
print(myCal.formatmonth(2020, 10))
18
Unidad 2: Módulos y Librerías Estándar
c = calendar.TextCalendar()
for dia_semana in c.iterweekdays():
print(dia_semana)
0 1 2 3 4 5 6
2021-03-29
2021-03-30
2021-03-31
2021-04-01
2021-04-02
2021-04-03
2021-04-04
…
itermonthdays(year, month): Retorna un iterador para el mes month en el año year
similar a itermonthdates(), pero no restringido por el intervalo datetime.date. Los días
retornados serán simplemente el día de los números del mes. Para los días fuera del mes
especificado, el número de día es 0.
0 0 0 1 2 3 4 5
19
Unidad 2: Módulos y Librerías Estándar
monthdays2calendar(): retorna una matriz con tuplas que contienen el número de día
del mes y el número de día de la semana (0-lunes, 1-martes, 2-miércoles ...)
locale.setlocale(category, locale=None)
Si locale está dado y no es None, setlocale() modifica la configuración de localización para
category. Las categorías disponibles son:
import locale
locale.setlocale(locale.LC_ALL, '')
'Spanish_Spain.1252'
locale.currency(1234.76)
'1234,76 €'
20
Unidad 2: Módulos y Librerías Estándar
locale.localeconv()
{'int_curr_symbol': 'EUR',
'currency_symbol': '€',
'mon_decimal_point': ',',
'mon_thousands_sep': '.',
'mon_grouping': [3, 0],
'positive_sign': '',
'negative_sign': '-',
'int_frac_digits': 2,
'frac_digits': 2,
'p_cs_precedes': 0,
'p_sep_by_space': 1,
'n_cs_precedes': 0,
'n_sep_by_space': 1,
'p_sign_posn': 1,
'n_sign_posn': 1,
'decimal_point': ',',
'thousands_sep': '.',
'grouping': [3, 0]}
locale.getdefaultlocale()
('es_ES', 'cp1252')
locale.getlocale(locale.LC_NUMERIC)
('es_ES', 'cp1252')
locale.getlocale(locale.LC_CTYPE)
('es_ES', 'cp1252')
21
Unidad 2: Módulos y Librerías Estándar
locale.getpreferredencoding()
'cp1252'
locale.normalize('es_ES')
'es_ES.ISO8859-1'
locale.resetlocale(locale.LC_NUMERIC)
import locale
valor = 123456.785
import locale
22
Unidad 2: Módulos y Librerías Estándar
import locale
valor = 123456.785
import locale
23
Unidad 2: Módulos y Librerías Estándar
locale.str(valor)
'123456,785'
Comparación de cadenas.
Para comparar cadenas se utiliza la función strcoll(primera, segunda). Esta función
retorna:
o un valor negativo si la primera cadena es menor que la segunda,
o un valor cero si son iguales,
o y un valor positivo si la primera cadena es mayor que la segunda.
locale.strcoll('Florero', 'Florista')
-1
locale.strcoll('Floricultura', 'Florecer')
1
locale.strcoll('Floral', 'Floral')
0
Cuando comparamos cadenas utilizando los operadores relacionales, si la cadena posee
caracteres específicos de un idioma, el resultado puede no ser correcto:
Al comparar las cadenas 'año' y 'aquello' utilizando los operadores relacionales, vemos que el
resultado no es el esperado, porque en español, la ñ es alfabéticamente inferior a la q. Esto
ocurre, porque hace una comparación por los códigos ASCII, pero si aplicamos la comparación
localizada obtendremos el resultado correcto:
24
Unidad 2: Módulos y Librerías Estándar
Para los enteros, existe una selección uniforme dentro de un rango. Para las secuencias, existe
una selección uniforme de un elemento aleatorio, una función para generar una permutación
aleatoria de una lista in-situ y una función para el muestreo aleatorio sin reemplazo.
Para números reales, existen funciones para calcular distribuciones uniformes, normales
(Gaussianas), log-normales, exponenciales negativas, gamma y beta.
import random
0.7506846663547462
Bookkeeping functions
random.seed(x): Inicializa el generador de números aleatorios. El generador de números
aleatorios necesita un número para empezar (un valor de semilla), para poder generar un
número aleatorio.
random.seed(42)
print(random.random())
0.6394267984578837
random.seed(42)
print(random.random())
0.6394267984578837
random.seed(3)
print(random.random())
0.23796462709189137
Ejemplo:
25
Unidad 2: Módulos y Librerías Estándar
0.06552885923981311
0.013167991554874137
0.013167991554874137
Cada vez que genera un número aleatorio, actualiza el generador, al reestablecerlo el state,
vuelve a generar el número anterior. Si generamos otro número aleatorio será diferente
print(random.random())
0.83746908209646
random.getrandbits(k): Devuelve un entero de Python con k bits aleatorios. Este
método se suministra con el generador Mersenne Twister y algunos otros generadores
también pueden proporcionarlo como una parte opcional de la API.
random.getrandbits(14)
7122
format(random.getrandbits(4), '08b')
'11110111100010'
random.randrange(stop)
random.randrange(start, stop[, step])
Ejemplos:
random.randint(a, b): Retorna un entero aleatorio N tal que a <= N <= b. Alias de
randrange(a, b+1).
26
Unidad 2: Módulos y Librerías Estándar
print(random.choice(mylist))
banana
print(mylist)
['apple', 'cherry', 'banana']
Para barajar una secuencia inmutable y retornar una nueva lista barajada, utilice sample(x,
k=len(x)) en su lugar.
cadena = "apple"
random.sample(cadena, k=len(cadena))
['l', 'e', 'p', 'p', 'a']
Retorna una nueva lista que contiene elementos de la población sin modificar la población
original. La lista resultante está en orden de selección de forma que todos los subsectores
27
Unidad 2: Módulos y Librerías Estándar
también son muestras aleatorias válidas. Esto permite que los ganadores de la rifa (la
muestra) se dividan en primer premio y ganadores del segundo lugar (los subsectores).
print(random.sample(mylist, k=2))
['apple', 'banana']
Función Descripción
random.uniform(a, b) Retorna un número con coma flotante aleatorio N
tal que
a <= N <= b para
a <= b y b <= N <= a para b < a.
random.triangular(low, high, Retorna un número con coma flotante N tal que
mode) low <= N <= high y con el mode especificado entre
esos límites. Los límites low (inferior) y high
(superior) son por defecto cero y uno. El argumento
mode tiene como valor por defecto el punto medio
entre los límites, dando lugar a una distribución
simétrica.
random.betavariate(alpha, beta) Distribución beta. Las condiciones de los parámetros
son alpha > 0 y beta > 0. Retorna valores dentro del
rango entre 0 y 1.
random.expovariate(lambd) Distribución exponencial. lambd es 1.0 dividido entre
la media deseada. Debe ser distinto a cero (El
parámetro debería llamarse lambda pero esa es una
palabra reservada en Python). Retorna valores dentro
del rango de 0 a infinito positivo si lambd es positivo,
y de infinito negativo a 0 si lambd es negativo.
random.gammavariate(alpha, Distribución gamma. (¡No la función gamma!) Las
beta) condiciones en los parámetros son alpha > 0 y beta >
0. La función de distribución de la probabilidad es:
28
Unidad 2: Módulos y Librerías Estándar
random.uniform(20, 60)
43.54114251593312
import random
import matplotlib.pyplot as plt
%matplotlib inline
29
Unidad 2: Módulos y Librerías Estándar
Métodos
Método Descripción
math.acos(x) Devuelve el valor de coseno de arco de x
math.acosh(x) Devuelve el coseno de arco hiperbólico de x
math.asin(x) Devuelve el seno de arco de x
math.asinh(x) Devuelve el seno de arco hiperbólico de x
math.atan(x) Devuelve el valor de tangente de arco de x
math.atan2(y, x) Devuelve el arco tangente de y/x en radianes
math.atanh(x) Devuelve el valor de arco tangente hiperbólico de x
math.ceil(x) Redondea un número hacia arriba hasta el entero más
cercano y devuelve el resultado
math.comb(n, k) Devuelve el número de formas de elegir k artículos de n
elementos sin repetición y orden
math.copysign(x, y) Devuelve un float que consta del valor del primer
parámetro y el signo del segundo parámetro
math.cos(x) Devuelve el coseno de x
math.cosh(x) Devuelve el coseno hiperbólico de x
math.degrees(x) Convierte un ángulo de radianes a grados
math.dist(p, q) Calcula la distancia euclidiana entre dos puntos
especificados (p y q), donde p y q son las coordenadas
de ese punto
math.erf(x) Devuelve la función de error de x
math.erfc(x) Devuelve la función de error complementario de x
math.exp(x) Devuelve el valor de Ex, donde E es el número de Euler
(aproximadamente 2.718281...), y x es el número que
se le pasa
math.expm1(x) Devuelve el valor de Ex - 1, donde E es el número de
Euler (aproximadamente 2.718281...), y x es el número
que se le pasa
math.fabs(x) Devuelve el valor absoluto de un número
math.factorial() Devuelve el factorial de un número
math.floor(x) Redondea un número hacia abajo al entero más
cercano y devuelve el resultado
math.fmod(x, y) Devuelve el resto de números especificados cuando un
número se divide por otro número
math.frexp() Devuelve la mantisa y el exponente, de un valor
especificado
math.fsum(iterable) Devuelve la suma de todos los elementos de un
iterable (tuplas, matrices, listas, etc.)
math.gamma(x) Devuelve el valor gamma de x
30
Unidad 2: Módulos y Librerías Estándar
Constantes
Constante Descripción
math.e Devuelve el número de Euler (2.7182...)
math.inf Devuelve un infinito positivo de punto flotante
math.nan Devuelve un valor NaN de punto flotante (not a number)
math.pi Devuelve PI (3.1415...)
math.tau Devoluciones tau (6.2831...)
Ejemplos:
import math
math.sin(0.5 * math.pi)
31
Unidad 2: Módulos y Librerías Estándar
1.0
math.sqrt(x)
7.810249675906654
math.factorial(5)
120
32
Unidad 2: Módulos y Librerías Estándar
El uso de las expresiones regulares en Python viene dado por el paquete re, que hay que
importar a nuestro código.
import re
Métodos
re.compile(patrón o pattern, flags=0): Compila un patrón de una expresión
regular en un objeto de expresión regular (RegexObject), que se puede usar para hacer
coincidencias usando su match(), search() y otros métodos que repasaremos a continuación.
Las operaciones con expresiones regulares que están disponibles como métodos compilados
a nivel de módulo, están también como funciones, con algunas diferencias en sus parámetros.
Las funciones son atajos que no requieren el paso de la compilación.
patron = re.compile('^Python')
patron
re.compile(r'^Python', re.UNICODE)
re.match(): Si hay cero o más caracteres al comienzo de la cadena que coincide con el
patrón de expresión regular, devuelva una instancia MatchObject correspondiente. Devuelva
None si la cadena no coincide con el patrón.
Import re
buscar = re.match("Programa", "Programa en Python")
print(buscar)
<re.Match object; span=(0, 8), match='Programa'>
buscar.string
'Programa en Python'
buscar.group()
'Programa'
buscar.span()
(0, 8)
buscar.start()
0
33
Unidad 2: Módulos y Librerías Estándar
buscar.end()
8
encontro.string
"Programa en Python"
encontro.group()
'Python'
encontro.span()
(12, 18)
encontro.start()
12
encontro.end()
18
re.findall(patrón, cadena): devuelve una lista que contiene todas las ocurrencias de
la expresión regular definida en patrón dentro del string cadena. Las ocurrencias se devuelven
en el mismo orden en que se han encontrado.
import re
re.findall("Python", "En este curso de Python, aprenderemos a
programar en Python y nos convertiremos en Pythonista.")
['Python', 'Python', 'Python']
finditer(): El cual es similar a re.findall, pero en lugar de devolvernos una lista nos
devuelve un iterador.
34
Unidad 2: Módulos y Librerías Estándar
print(encontrados)
correo = re.split("@","[email protected]")
correo
['m.sierra', 'cloudftic.com']
correo[0]
'm.sierra'
correo[1]
'cloudftic.com'
import re
Metacaracteres
Se conoce como meta caracteres aquellos que, dependiendo del contexto, tienen un
significado especial para las expresiones regulares. Por lo tanto, debemos usar el carácter de
barra inversa ('\') para indicar formas especiales o para permitir el uso de caracteres especiales
sin invocar su significado especial.
35
Unidad 2: Módulos y Librerías Estándar
REGEX
Descripción Ejemplo Coincidencia No Coincidencia
Sintaxis
Comienza con demostración mi
^ ^demo
demostración
$ Finaliza con demo$ mi demostración demostración
. Cualquier carácter go.gle google gogle
Indica la repetición de gogle, goooogle goggle
* un carácter cero o más goo*gle
veces
Indica la repetición de goo+gle google, gogle, goggle
+ un carácter una o más goooogle
veces
Indica la repetición de demo123, demoA123
? un carácter cero o una demos?123 demos123
vez
Cualquiera de estos analyse, analyze analyxe
[abc] analy[zs]e
caracteres
Cualquier carácter del demo2, demo3 demo1, demo5
[a-c] demo[2-4]
rango
Ninguno de estos analyxe analyse, analyze
[^abc] analy[^zs]e
caracteres
Ningún carácter del demo1, demo5 demo2, demo3
[^a-c] demo[^2-4]
rango
o demo, demos, test
| demo|example
example
{n} n veces exactas w[3] www w.ww
{n,m} Desde n hasta m veces a[4,7] aaaa, aaaaa, aaaaaaaa, aaa, a
aaaaaa, aaaaaaa
Al menos n veces go[2,]gle google, gooogle, ggle, gogle
{n,}
goooogle
Grupo ^[demo|example][0- demo1, demoexample2
[]
9]+ example4
\ Escape AU\$10 AU$10, AU$100 AU10, 10
\s Espacios en blanco
\S No espacios en blanco
\d Dígitos
\D No dígitos
\w Caracteres
No caracteres
\W [espacios, signos de
puntuación]
36
Unidad 2: Módulos y Librerías Estándar
‘@([^ ]*)’ En este caso sabemos que el dominio viene después de un símbolo de arroba
(@) que indicamos en nuestra expresión regular, seguido de una condición cerrada entre
paréntesis ya que no queremos que el resultado contenga arrobas.
Ejemplos:
patron = '^.ython'
re.findall(patron, frase)
['Cython']
patron = '\\s.ython'
re.findall(patron, frase)
[' Nython', ' Python']
patron = '[CN]ython'
re.findall(patron, frase)
['Cython', 'Nython']
patron = '[A-Z][a-z]+'
37
Unidad 2: Módulos y Librerías Estándar
re.findall(patron, frase)
['Cython', 'Nython', 'Python']
38