ADD dia 09
This commit is contained in:
parent
f321a35e8d
commit
35491ac02e
74
dia_09/01_modulo_collections.py
Normal file
74
dia_09/01_modulo_collections.py
Normal file
@ -0,0 +1,74 @@
|
||||
"""
|
||||
Módulo collections
|
||||
|
||||
Counter - Es una especia de diccionario
|
||||
que cuentas elementos de una lista, tupla o string
|
||||
|
||||
DefaultDict - Da valores por defecto
|
||||
|
||||
NamedTuple - Tupla con nombres.
|
||||
Sirve para tener nombres además de índices
|
||||
|
||||
deque - contenedor similar a una lista con appends
|
||||
y pops rápidos en ambos extremos
|
||||
|
||||
"""
|
||||
|
||||
from collections import Counter, defaultdict, namedtuple, deque
|
||||
|
||||
|
||||
# Counter
|
||||
|
||||
numeros = [8, 6, 9, 5, 4, 5, 5, 5, 8, 7, 4, 3, 5, 4, 4]
|
||||
|
||||
print(Counter(numeros))
|
||||
print(Counter('mississippi'))
|
||||
|
||||
print()
|
||||
# Se puede utilizar módulos de Counter
|
||||
serie = Counter([1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4])
|
||||
# En orden del más común a menos
|
||||
print(serie.most_common())
|
||||
# Podemos meter Counter en una lista
|
||||
print(list(serie))
|
||||
|
||||
|
||||
print()
|
||||
# DefaultDict
|
||||
|
||||
mi_dic = defaultdict(lambda: 'nada')
|
||||
mi_dic['uno'] = 'verde'
|
||||
|
||||
# Cuando se llama a un valor que no existe
|
||||
# defaultdict lo añadirá con el valor por defecto
|
||||
print(mi_dic['cuatro'])
|
||||
|
||||
print(mi_dic)
|
||||
|
||||
|
||||
print()
|
||||
# NamedTuple
|
||||
|
||||
# Creamos una clase y con NamedTuple nombramos
|
||||
# a los elementos de la tupla
|
||||
Persona = namedtuple('Persona', ['nombre', 'altura', 'peso'])
|
||||
|
||||
# Damos valores
|
||||
ariel = Persona('Ariel', 1.76, 67)
|
||||
|
||||
# y podemos imprimir por el nombre dado
|
||||
print(ariel.altura)
|
||||
print(ariel.peso)
|
||||
|
||||
# Sin perder la manera clásica de llamarle
|
||||
# por el índice
|
||||
print(ariel[0])
|
||||
|
||||
|
||||
# deque
|
||||
lista_ciudades = deque(
|
||||
["Londres", "Berlin", "París", "Madrid", "Roma", "Moscú"])
|
||||
|
||||
lista_ciudades.appendleft('Badajoz')
|
||||
|
||||
print(lista_ciudades)
|
85
dia_09/02_modulo_os_shutil.py
Normal file
85
dia_09/02_modulo_os_shutil.py
Normal file
@ -0,0 +1,85 @@
|
||||
"""
|
||||
Módulos os y shutil
|
||||
|
||||
También método send2trash
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import send2trash
|
||||
|
||||
# Mostrar el directorio actual
|
||||
print(os.getcwd())
|
||||
|
||||
# Vamos a abrir un archivo. Como no existe se creará.
|
||||
# Usamos la 'w' para escribir en él
|
||||
archivo = open('curso.txt', 'w')
|
||||
|
||||
archivo.write('texto de prueba')
|
||||
|
||||
archivo.close()
|
||||
|
||||
|
||||
print()
|
||||
# Mostrar archivos de la ubicación actual
|
||||
print(os.listdir())
|
||||
|
||||
|
||||
print()
|
||||
# Mover archivos con shutil
|
||||
# Movemos curso al día_08
|
||||
# Se puede con rutas relativas o absolutas
|
||||
shutil.move('curso.txt', '../dia_08')
|
||||
|
||||
# Varios métodos para eliminar ficheros
|
||||
# unlink - Elimina los ficheros de la ruta que digas
|
||||
# os.unlink(path)
|
||||
|
||||
# rmdir - Elimina directorios de la ruta que digas
|
||||
# os.rmdir(path)
|
||||
|
||||
# rmt - Eliminar todo CUIDAO Elimina todo y es irreversible
|
||||
# shutil.rmt
|
||||
|
||||
# Pongo una pausa para ver como
|
||||
# se crea y elimina el fichero
|
||||
sleep = 'sleep 3'
|
||||
os.system(sleep)
|
||||
|
||||
|
||||
# Para eliminar enviando a la papelera
|
||||
# mejor con el método send2trash
|
||||
send2trash.send2trash('../dia_08/curso.txt')
|
||||
|
||||
|
||||
# walk - Recorrer carpetas
|
||||
|
||||
# Si lo imprimimos directamente
|
||||
# nos dice que es un generator
|
||||
|
||||
print(os.walk('../..'))
|
||||
|
||||
# así que la info la proporciona tal como se le pide
|
||||
print()
|
||||
# Creamos una variable con la ruta
|
||||
ruta = '../dia_08'
|
||||
|
||||
# Hay que tener en cuenta que guarda tuplas con
|
||||
# - carpetas
|
||||
# - subcarpetas
|
||||
# - ficheros
|
||||
# Vamos a extraerlo con un iterador
|
||||
for carpeta, subcarpeta, fichero in os.walk(ruta):
|
||||
print(f'En la carpeta: {carpeta}')
|
||||
print(f'Las subcarpetas son:')
|
||||
for sub in subcarpeta:
|
||||
print(f'\t{sub}')
|
||||
|
||||
print('Los archivos son: ')
|
||||
for arch in fichero:
|
||||
# En los ficheros le vamos a poner un filtro
|
||||
# para que imprima solo lo que nos interesa
|
||||
if arch.startswith('0'):
|
||||
print(f'\t{arch}')
|
||||
print()
|
32
dia_09/03_modulo_datetime_1.py
Normal file
32
dia_09/03_modulo_datetime_1.py
Normal file
@ -0,0 +1,32 @@
|
||||
"""
|
||||
Módulo datime
|
||||
Primera parte
|
||||
|
||||
- Almacenar hora y fecha en variables
|
||||
- Cálculos de tiempo
|
||||
- Mostrar en diferentes formatos
|
||||
|
||||
"""
|
||||
import datetime
|
||||
|
||||
# Guardar en una variable la hora
|
||||
mi_hora = datetime.time(17, 35, 50, 1300)
|
||||
# Imprimir tipo de formato
|
||||
print(f'Formato de datetime: {type(mi_hora)}')
|
||||
# Imprimir la hora establecida
|
||||
print(mi_hora)
|
||||
# Imprimir un elemento de la hora
|
||||
print(mi_hora.minute)
|
||||
|
||||
|
||||
print()
|
||||
# Guardar en variable la fecha
|
||||
mi_fecha = datetime.date(2025, 10, 23)
|
||||
# Mostrar fecha
|
||||
print(mi_fecha)
|
||||
# Mostrar un elemento de fecha
|
||||
print(mi_fecha.year)
|
||||
# Cambiar el formato a la fecha
|
||||
print(mi_fecha.ctime())
|
||||
# Mostrar el día de hoy
|
||||
print(mi_fecha.today())
|
59
dia_09/03_modulo_datetime_2.py
Normal file
59
dia_09/03_modulo_datetime_2.py
Normal file
@ -0,0 +1,59 @@
|
||||
"""
|
||||
Módulo datime
|
||||
Segunda parte
|
||||
|
||||
"""
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
# Para los siguientes ejercicios
|
||||
# se debe importar un objeto
|
||||
# llamado datetime que se encuentra
|
||||
# en el módulo datetime, el cuál crea conflicto
|
||||
# con el anterior ejercicio import datetime
|
||||
|
||||
mi_dia = datetime(2025, 5, 15, 22, 10, 15, 2500)
|
||||
|
||||
print(mi_dia)
|
||||
|
||||
# Se puede reemplazar elementos
|
||||
mi_dia = mi_dia.replace(month=11)
|
||||
|
||||
print(mi_dia)
|
||||
|
||||
|
||||
print()
|
||||
# Se pueden calcular tiempos
|
||||
# se debe importar date
|
||||
|
||||
# Variables de nacimiento y de hoy
|
||||
nacimiento = date(1983, 10, 30)
|
||||
hoy = date.today()
|
||||
# Se resta
|
||||
tiempo_vida = hoy - nacimiento
|
||||
# Se muestra en dias
|
||||
print(tiempo_vida.days)
|
||||
|
||||
# También podemos calcular horas
|
||||
|
||||
despertar = datetime(2023, 3, 30, 6, 30)
|
||||
dormir = datetime(2023, 3, 30, 23, 35)
|
||||
|
||||
tiempo_despierto = dormir - despertar
|
||||
|
||||
# Podemos verlo en segundos
|
||||
print(tiempo_despierto.seconds)
|
||||
|
||||
print()
|
||||
# Minutos ahora
|
||||
|
||||
hoys = datetime(2100, 10, 20, 10, 20).today().time().minute
|
||||
|
||||
print(hoys)
|
||||
|
||||
|
||||
# Calcular el tiempo
|
||||
# Extra. Importo timedelta para probarlo
|
||||
|
||||
hora_actual = datetime.now() + timedelta(hours=5, minutes=50)
|
||||
|
||||
print('{:%H:%M}'.format(hora_actual))
|
108
dia_09/04_modulo_medir_tiempo.py
Normal file
108
dia_09/04_modulo_medir_tiempo.py
Normal file
@ -0,0 +1,108 @@
|
||||
"""
|
||||
Módulo para medir tiempo
|
||||
|
||||
time - puedes realizar marcas de tiempo en el código
|
||||
para poder hacer comparaciones
|
||||
|
||||
timeit - Más especifico, muestra cuanto tarda en ejecutarse un código.
|
||||
|
||||
"""
|
||||
|
||||
import time
|
||||
import timeit
|
||||
|
||||
# Dos funciones con formas distintas
|
||||
# de hacer código
|
||||
# para el mismo resultado:
|
||||
|
||||
|
||||
def prueba_for(numero):
|
||||
""" Prueba de iteración for """
|
||||
lista = []
|
||||
for num in range(1, numero+1):
|
||||
lista.append(num)
|
||||
return lista
|
||||
|
||||
|
||||
def prueba_while(numero):
|
||||
""" Prueba de iteración while """
|
||||
lista = []
|
||||
contador = 1
|
||||
while contador <= numero:
|
||||
lista.append(contador)
|
||||
contador += 1
|
||||
return lista
|
||||
|
||||
|
||||
# Vamos a identificar cual de las dos funciones
|
||||
# resuelve de manera más eficiente
|
||||
# con el módulo time, haciendo
|
||||
# marcas de tiempo
|
||||
inicio = time.time()
|
||||
prueba_for(1000000)
|
||||
final = time.time()
|
||||
print(f' La función for tardó: {final - inicio}')
|
||||
|
||||
inicio = time.time()
|
||||
prueba_while(1000000)
|
||||
final = time.time()
|
||||
print(f' La función while tardó: {final - inicio}')
|
||||
|
||||
|
||||
print()
|
||||
# timeit puede identificar
|
||||
# cuanto tarda con más precisión
|
||||
"""
|
||||
Sintaxis:
|
||||
|
||||
duracion = timeit.timeit(declaracion, setup, number = numero)
|
||||
|
||||
declaracion: recibe el código que cuya duración
|
||||
de ejecución queremos medir.
|
||||
→ es la invocación mi función
|
||||
|
||||
setup: recibe las instrucciones que el parámetro
|
||||
declaracion requiere para funcionar.
|
||||
→ es la definición (def...) de mi función
|
||||
|
||||
number: cantidad de veces que se evaluará el
|
||||
código para obtener su tiempo de ejecución mínimo.
|
||||
→ pueden ser varios miles o cientos de veces (dependiendo de la complejidad)
|
||||
"""
|
||||
|
||||
declaracion = '''
|
||||
prueba_for(10)
|
||||
'''
|
||||
|
||||
mi_setup = '''
|
||||
def prueba_for(numero):
|
||||
""" Prueba de iteración for """
|
||||
lista = []
|
||||
for num in range(1, numero+1):
|
||||
lista.append(num)
|
||||
return lista
|
||||
'''
|
||||
|
||||
duracion_for = timeit.timeit(declaracion, mi_setup, number=10000000)
|
||||
|
||||
print(f' La función for tardó: {duracion_for}')
|
||||
|
||||
|
||||
declaracion2 = '''
|
||||
prueba_while(10)
|
||||
'''
|
||||
|
||||
mi_setup2 = '''
|
||||
def prueba_while(numero):
|
||||
""" Prueba de iteración while """
|
||||
lista = []
|
||||
contador = 1
|
||||
while contador <= numero:
|
||||
lista.append(contador)
|
||||
contador += 1
|
||||
return lista
|
||||
'''
|
||||
|
||||
duracion_while = timeit.timeit(declaracion2, mi_setup2, number=10000000)
|
||||
|
||||
print(f' La función while tardó: {duracion_while}')
|
51
dia_09/05_modulo_math.py
Normal file
51
dia_09/05_modulo_math.py
Normal file
@ -0,0 +1,51 @@
|
||||
"""
|
||||
Módulo math
|
||||
|
||||
Contiene el kit completo para trabajar con números:
|
||||
Matemática clásica y avanzada.
|
||||
|
||||
También existe el módulo numpy
|
||||
que es más avanzado aún. https://numpy.org/
|
||||
|
||||
"""
|
||||
|
||||
import math
|
||||
|
||||
# EJEMPLOS
|
||||
|
||||
# Redondeo hacia abajo, hacia el piso
|
||||
resultado = math.floor(90.99999)
|
||||
print(resultado)
|
||||
|
||||
# Redondeo hacia arriba, hacia el techo
|
||||
resultado = math.ceil(90.11111)
|
||||
print(resultado)
|
||||
|
||||
# Mostrar pi
|
||||
resultado = math.pi
|
||||
print(resultado)
|
||||
|
||||
# Calcular un log, en función de un número
|
||||
# y una base, saber por cuanto deberíamos exponer
|
||||
# la base para llegar al número
|
||||
resultado = math.log(625, 5)
|
||||
print(resultado)
|
||||
# Calcular en base 10
|
||||
resultado = math.log10(25)
|
||||
print(resultado)
|
||||
|
||||
# Calcular la tangente
|
||||
resultado = math.tan(2565)
|
||||
print(resultado)
|
||||
|
||||
# Calcular la coseno
|
||||
resultado = math.cos(2565)
|
||||
print(resultado)
|
||||
|
||||
# Calcular la raíz cuadrada de pi
|
||||
resultado = math.sqrt(math.pi)
|
||||
print(resultado)
|
||||
|
||||
# Calcular factorial
|
||||
resultado = math.factorial(7)
|
||||
print(resultado)
|
222
dia_09/06_modulo_re.py
Normal file
222
dia_09/06_modulo_re.py
Normal file
@ -0,0 +1,222 @@
|
||||
"""
|
||||
Módulo re
|
||||
|
||||
Expresiones regulares
|
||||
|
||||
Operadores especiales:
|
||||
[ ] un set de caracteres
|
||||
. un carácter cualquiera
|
||||
^ inicia con
|
||||
$ finaliza con
|
||||
| operador lógico "O"
|
||||
|
||||
Cuantificadores:
|
||||
* cero o más ocurrencias: 0 - n
|
||||
+ una o más ocurrencias: 1 - n
|
||||
? cero o una ocurrencia: 0 - 1
|
||||
{ } un número especificado de ocurrencias
|
||||
{n} se repite n veces
|
||||
{n,m} se repite de n a m veces
|
||||
{n, } se repite de n veces hacia arriba
|
||||
|
||||
Carácteres especiales:
|
||||
\d dígito numérico
|
||||
\D NO numérico
|
||||
\w caracter alfanumérico
|
||||
\W NO alfanumérico
|
||||
\s espacio en blanco
|
||||
\S NO espacio en blanco
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
# Buscar este patrón: ### - #### - ####
|
||||
# De diferentes formas:
|
||||
patron1 = r'\d\d\d-\d\d\d-\d\d\d\d'
|
||||
patron2 = r'\d{3}-\d{3}-\d{4}'
|
||||
# Si no existe dirá: Node
|
||||
verificacion01 = re.search(patron1, '234-233-l23l')
|
||||
# Si existe dirá que tiene match:
|
||||
# <re.Match object; span=(0, 12), match='234-233-1231'>
|
||||
verificacion02 = re.search(patron1, '234-233-1231')
|
||||
print(
|
||||
f'La verificación 1 es {verificacion01}\nLa verificación 2 es {verificacion02}')
|
||||
|
||||
|
||||
print()
|
||||
|
||||
# Usando un texto
|
||||
|
||||
texto = 'Si necesitas ayuda llama al (658)-598-9977 las 24 horas al servicio de ayuda online'
|
||||
|
||||
palabra = 'ayuda' in texto
|
||||
|
||||
print(f'Es {palabra} que la palabra ayuda está en el texto')
|
||||
# Con expresión regular
|
||||
patron03 = 'ayuda'
|
||||
|
||||
# Busqueda es un objeto regular expresión
|
||||
# en concreto search
|
||||
busqueda01 = re.search(patron03, texto)
|
||||
# con lo cual, tiene módulos
|
||||
# span indica la ubicación
|
||||
print(busqueda01.span())
|
||||
# start indica la ubicación del inicio
|
||||
print(busqueda01.start())
|
||||
# end indica la ubicación del final
|
||||
print(busqueda01.end())
|
||||
|
||||
|
||||
print()
|
||||
# Objeto findall
|
||||
# Mete en una lista cada vez que aparece el patron
|
||||
busqueda02 = re.findall(patron03, texto)
|
||||
print(busqueda02)
|
||||
# Podemos ver el número de veces con len
|
||||
print(len(busqueda02))
|
||||
|
||||
|
||||
print()
|
||||
# Podemos iterar la búsqueda
|
||||
# con el módulo finiter para
|
||||
# tener información de cada resultado encontrado
|
||||
for hallazgo in re.finditer(patron03, texto):
|
||||
print(hallazgo.span())
|
||||
|
||||
|
||||
print()
|
||||
# Vamos a buscar el número de teléfono del texto
|
||||
# se puede escapar los paréntesis para que los búsque
|
||||
# y agrupar con parétesis
|
||||
patron04 = r'\((\d{3})\)-(\d{3})-(\d{4})'
|
||||
|
||||
busqueda03 = re.search(patron04, texto)
|
||||
# Podemos mostrar el resultado mostrando los grupos
|
||||
print(busqueda03.group())
|
||||
# y como además los hemos encerrado en paréntesis
|
||||
# podemos llamar a cada uno de los grupos
|
||||
print(busqueda03.group(2))
|
||||
|
||||
# Podemos controlar la entrada del usuario
|
||||
# ⚠️ Cuidao: Este método no sirve para verificar contraseñas
|
||||
# por ejemplo:
|
||||
#
|
||||
print("""
|
||||
Introduce una clave con las condiciones:
|
||||
- Empezar con una letra
|
||||
- En total 8 carácteres
|
||||
""")
|
||||
|
||||
clave = input('> ')
|
||||
patron05 = r'\D{1}\w{7}'
|
||||
chequear = re.search(patron05, clave)
|
||||
print(chequear)
|
||||
|
||||
|
||||
print()
|
||||
# Operadores especiales
|
||||
# or
|
||||
buscarunouotro = re.search(r'online|offline', texto)
|
||||
print(buscarunouotro.group())
|
||||
|
||||
|
||||
print()
|
||||
# Comodin en un espacio con punto
|
||||
comodin01 = re.search(r'...vicio', texto)
|
||||
print(comodin01.group())
|
||||
|
||||
|
||||
print()
|
||||
# Comodin inicio con ^
|
||||
# Por ejemplo, que el primer caracter no sea un dígito
|
||||
comodin02 = re.search(r'^\D', texto)
|
||||
print(comodin02.group())
|
||||
|
||||
|
||||
print()
|
||||
# Comodin final con $
|
||||
# Por ejemplo, que el último caracter sea un dígito
|
||||
comodin03 = re.search(r'\d$', texto)
|
||||
print(comodin03)
|
||||
|
||||
|
||||
print()
|
||||
# Comodin de un set de caracteres con [^]
|
||||
# Por ejemplo, todos los que incluyan un carácter vacío
|
||||
comodin04 = re.findall(r'[^\S]', texto)
|
||||
print(f'El texto contiene {len(comodin04)} espacios en blanco')
|
||||
|
||||
|
||||
print()
|
||||
# Comodin de un set de caracteres con [^+]
|
||||
# Ahora, además, va a agrupar los que no son
|
||||
# espacios vacíos en strings dentro de la lista
|
||||
# Seleciona cada inicio con caracter hasta que
|
||||
# encuentra otro espacio en blanco.
|
||||
comodin05 = re.findall(r'[^\s]+', texto)
|
||||
print(comodin05)
|
||||
|
||||
# Con esto y join podemos unir de nuevo el texto pero
|
||||
# sustituyendo con guiones, por ejemplo.
|
||||
# Puede servir para corregir nombres de ficheros o directorios.
|
||||
print('-'.join(comodin05))
|
||||
|
||||
|
||||
# EJERCICIOS
|
||||
|
||||
|
||||
print()
|
||||
# Verificar si es un mail
|
||||
|
||||
|
||||
def verificar_email(email):
|
||||
""" Verificar sin es un mail .com """
|
||||
patron = r'[\w]*@[\w]*\.com[\w]*'
|
||||
verificacion = re.search(patron, email)
|
||||
|
||||
if verificacion:
|
||||
print("Ok. Es un mail")
|
||||
else:
|
||||
print("La dirección de email es incorrecta")
|
||||
|
||||
|
||||
verificar_email("email@mail.com")
|
||||
|
||||
print()
|
||||
# Verificar saludo
|
||||
|
||||
|
||||
def verificar_saludo(frase):
|
||||
""" Verificar si saluda con Hola """
|
||||
patron = r'^Hola'
|
||||
verificacion = re.search(patron, frase)
|
||||
|
||||
if verificacion:
|
||||
print("Ok. Este mensaje tiene saludo al inicio")
|
||||
else:
|
||||
print("No has saludado")
|
||||
|
||||
|
||||
verificar_saludo("Hola, que tal?")
|
||||
|
||||
|
||||
print()
|
||||
# Verificar Código postal.
|
||||
# Dos caracteres alfanuméricos
|
||||
# y cuatro numéricos a continuación
|
||||
# (ejemplo: XX1234)
|
||||
|
||||
|
||||
def verificar_cp(cp):
|
||||
""" Verificar si saluda con Hola """
|
||||
patron = r'^\w{2}\d{4}$'
|
||||
verificacion = re.search(patron, cp)
|
||||
|
||||
if verificacion:
|
||||
print("Ok. Es un código postal")
|
||||
else:
|
||||
print("El código postal ingresado no es correcto")
|
||||
|
||||
|
||||
verificar_cp("XX1234")
|
15
dia_09/07_modulo_comprimir_shutil.py
Normal file
15
dia_09/07_modulo_comprimir_shutil.py
Normal file
@ -0,0 +1,15 @@
|
||||
"""
|
||||
Módulos comprimir y descomprimir
|
||||
|
||||
shutil - Nos permite comprimir
|
||||
todos los archivos y directorios de una carpeta
|
||||
|
||||
"""
|
||||
|
||||
import shutil
|
||||
|
||||
carpeta_origen = 'carpeta_superior'
|
||||
|
||||
archivo_destino = 'todo_comprimido'
|
||||
|
||||
shutil.make_archive(archivo_destino, 'zip', carpeta_origen)
|
15
dia_09/07_modulo_comprimir_zipfile.py
Normal file
15
dia_09/07_modulo_comprimir_zipfile.py
Normal file
@ -0,0 +1,15 @@
|
||||
"""
|
||||
Módulos comprimir y descomprimir
|
||||
|
||||
zipfile
|
||||
|
||||
"""
|
||||
|
||||
import zipfile
|
||||
|
||||
mi_zip = zipfile.ZipFile('archivo_comprimido.zip', 'w')
|
||||
|
||||
mi_zip.write('mi_texto_A.txt')
|
||||
mi_zip.write('mi_texto_B.txt')
|
||||
|
||||
mi_zip.close()
|
10
dia_09/07_modulo_descomprimir_shutil.py
Normal file
10
dia_09/07_modulo_descomprimir_shutil.py
Normal file
@ -0,0 +1,10 @@
|
||||
"""
|
||||
Módulos comprimir y descomprimir
|
||||
|
||||
shutil
|
||||
|
||||
"""
|
||||
|
||||
import shutil
|
||||
|
||||
shutil.unpack_archive('todo_comprimido.zip', 'extraccion_terminada', 'zip')
|
13
dia_09/07_modulo_descomprimir_zipfile.py
Normal file
13
dia_09/07_modulo_descomprimir_zipfile.py
Normal file
@ -0,0 +1,13 @@
|
||||
"""
|
||||
Módulos comprimir y descomprimir
|
||||
|
||||
zipfile
|
||||
|
||||
"""
|
||||
|
||||
import zipfile
|
||||
|
||||
|
||||
zip_abierto = zipfile.ZipFile('archivo_comprimido.zip', 'r')
|
||||
|
||||
zip_abierto.extractall()
|
8
dia_09/08_Descomprimir_proyecto.py
Normal file
8
dia_09/08_Descomprimir_proyecto.py
Normal file
@ -0,0 +1,8 @@
|
||||
"""
|
||||
Descomprimir proyecto día 9
|
||||
|
||||
"""
|
||||
|
||||
import shutil
|
||||
|
||||
shutil.unpack_archive('Proyecto+Dia+9.zip', '09_Programa09', 'zip')
|
46
dia_09/09_Programa09/Instrucciones.txt
Normal file
46
dia_09/09_Programa09/Instrucciones.txt
Normal file
@ -0,0 +1,46 @@
|
||||
¡Qué bueno que lograste abrirme!
|
||||
|
||||
Junto a esta nota se ha descomprimido 1 carpeta, y está repletas de subcarpetas y de archivos .txt.
|
||||
|
||||
No te preocupes por revisarlos, solo tienen texto aleatorio... excepto algunos. ¯\_(ツ)_/¯
|
||||
|
||||
Tu trabajo es crear un Buscador de Números de Serie. ¿Qué es eso? Es un programa que se encargue de buscar números de serie que cumplan un determinado formato, dentro de un arbol de carpetas.
|
||||
|
||||
Tu programa va a recorrer todos los archivos y subcarpetas de un directorio raiz (en este caso, la carpeta que acabas de descomprimir), y va a buscar cualquier string que coincida con un patrón de número de serie. Sabemos que no puede haber más de un número de serie por archivo.
|
||||
|
||||
Para lograrlo vas a usar el módulo os para abrir e iterear por el directorio, y las expresiones regulares para encontrar el formato de número de serie correcto.
|
||||
|
||||
A los fines de este ejercicio, estas son las condiciones de formato que deben cumplir los hallazgos:
|
||||
- [N] + [tres carateres de texto] + [-] + [5 números]
|
||||
|
||||
Por ejemplo: Nryu-12365
|
||||
|
||||
La presentación en pantalla de los hallazgos debe ser un listado en formato de tabla, que respete el siguiente formato de ejemplo:
|
||||
|
||||
----------------------------------------------------
|
||||
Fecha de búsqueda: [fecha de hoy]
|
||||
|
||||
ARCHIVO NRO. SERIE
|
||||
------- ----------
|
||||
texto1.txt Nter-15496
|
||||
texto25.txt Ngba-85235
|
||||
|
||||
Números encontrados: 2
|
||||
Duración de la búsqueda: 1 segundos
|
||||
----------------------------------------------------
|
||||
|
||||
IMPORTANTE
|
||||
|
||||
* La 'Duración de búsqueda' debe estar redondeada hacia arriba
|
||||
|
||||
* No olvides que la mejor forma de recorrer un arbol de carpetas, probablemente sea con el método walk() de os.
|
||||
|
||||
* Observa que la fecha de búsqueda debe ser la fecha del día en que ejecutes el código, por lo que necesitas echar mano del módulo datetime.
|
||||
|
||||
* Animate a encontrar una manera de mostrar la fecha de hoy con el formato dd/mm/aa.
|
||||
|
||||
* Para informar la duración de la búsqueda al final de tu presentación, vas a necesitar del módulo time.
|
||||
|
||||
* Recuerda que para poder imprimir todo en formato de tabla puedes usar los caracteres especiales \t para tabular.
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum Nhjn-54885 odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Nlkj-41523 Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Nann-74705 Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Nqqs-82506 Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Nopp-10052 Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Nmrn-20155 Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam Njko-60603 tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Nbbg-90999 Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor Nwwe-88985 Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Fusce at ornare sapien. Curabitur vestibulum nibh in neque tincidunt, non interdum ante semper. Vivamus eget scelerisque eros. Vestibulum egestas elementum congue. Ut hendrerit ultrices nunc, quis elementum arcu. Fusce ullamcorper quam accumsan, commodo augue ac, viverra ipsum. Pellentesque venenatis vehicula felis id placerat. Praesent mollis lobortis lorem, vel efficitur risus mollis eget. Quisque molestie sapien quis enim ultrices mollis nec eu lacus.
|
@ -0,0 +1 @@
|
||||
Curabitur eget bibendum dolor. Praesent eu metus ac neque convallis pharetra. Phasellus in enim lobortis, volutpat orci sit amet, scelerisque tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Naac-11022 Proin ultricies in nulla et facilisis. Pellentesque justo ipsum, pellentesque sed convallis et, feugiat quis nulla. Aliquam maximus elementum nisl non rutrum. Suspendisse id malesuada ante. Phasellus commodo ex quis orci iaculis finibus.
|
@ -0,0 +1 @@
|
||||
Etiam porttitor ligula fermentum mauris laoreet, a ultrices nibh scelerisque. Quisque erat mauris, rutrum quis pretium vitae, sollicitudin nec nisl. Etiam pretium est a commodo elementum. In lectus elit, semper eget aliquet nec, eleifend ut velit. Phasellus feugiat neque malesuada purus congue, in tincidunt dolor finibus. Proin eu bibendum velit. Aliquam tincidunt euismod justo, vel elementum tellus semper eu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis metus mauris, ut porttitor dolor volutpat a. Proin porttitor enim at tincidunt sollicitudin. Maecenas auctor pretium tempus. Nunc sit amet mi nunc.
|
@ -0,0 +1 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tellus porta, vehicula nisl vel, ultrices orci. Mauris egestas, lectus eget consectetur dictum, dui lectus suscipit nulla, vitae tristique Nerp-66532 elit orci dignissim elit. Sed fermentum elementum odio, sit amet rhoncus nibh pellentesque eu. Proin sit amet porttitor lorem. Cras urna orci, molestie a semper quis, commodo non augue. Vestibulum blandit pellentesque lectus, sit amet dignissim orci finibus quis. In sem metus, pellentesque eget ultrices ac, tempor eleifend ligula.
|
109
dia_09/09_Programa09/buscador_num_serie.py
Normal file
109
dia_09/09_Programa09/buscador_num_serie.py
Normal file
@ -0,0 +1,109 @@
|
||||
"""
|
||||
Programa día 9 - Buscador de números de serie
|
||||
|
||||
- Recorrer todos los archivos
|
||||
y subcarpetas de directorio raiz Mi_Gran_Directorio. método walk() de os.
|
||||
- Buscar string qye coincida con un patrón de número de serie
|
||||
- Como mucho un número de serie por fichero.
|
||||
módulo os para abrir e iterear por el directorio
|
||||
expresiones regulares para encontrar el formato de número de serie correcto.
|
||||
Formato:
|
||||
[N] + [tres carateres de texto] + [-] + [5 números]
|
||||
Ejemplo: Nryu-12365
|
||||
Presentación de resultados:
|
||||
----------------------------------------------------
|
||||
Fecha de búsqueda: [fecha de hoy - formato dd/mm/aa]
|
||||
|
||||
ARCHIVO NRO. SERIE
|
||||
------- ----------
|
||||
texto1.txt Nter-15496
|
||||
texto25.txt Ngba-85235
|
||||
|
||||
Números encontrados: 2
|
||||
Duración de la búsqueda: 1 segundos
|
||||
----------------------------------------------------
|
||||
|
||||
- La 'Duración de búsqueda' debe estar redondeada hacia arriba
|
||||
|
||||
"""
|
||||
|
||||
from datetime import date
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import time
|
||||
import math
|
||||
|
||||
|
||||
def fecha_hoy():
|
||||
"""
|
||||
Devuelve la fecha actual
|
||||
"""
|
||||
|
||||
hoy = date.today().strftime('%d/%m/%Y')
|
||||
fecha = f'\nFecha de búsqueda: {hoy}'
|
||||
|
||||
return fecha
|
||||
|
||||
|
||||
def abrir_fichero(file_path):
|
||||
"""
|
||||
Recoge un path de un fichero
|
||||
y devuelve el contenido del fichero
|
||||
"""
|
||||
|
||||
with open(file_path, encoding="utf-8") as file:
|
||||
contenido = file.read()
|
||||
|
||||
return contenido
|
||||
|
||||
|
||||
def busqueda_serie():
|
||||
"""
|
||||
Buscador
|
||||
"""
|
||||
|
||||
patron = r'N\D{3}-\d{5}'
|
||||
ruta = './Mi_Gran_Directorio'
|
||||
lista_filas = []
|
||||
|
||||
for root, sub, fichero in os.walk(ruta):
|
||||
if fichero:
|
||||
for arch in fichero:
|
||||
sub.clear()
|
||||
texto = abrir_fichero(Path(root, arch))
|
||||
busqueda = re.findall(patron, texto)
|
||||
if re.findall(patron, texto):
|
||||
fila = f'{arch}\t| {busqueda[0]}\t| {root}'
|
||||
lista_filas.append(fila)
|
||||
|
||||
lista_filas.sort()
|
||||
return lista_filas
|
||||
|
||||
|
||||
def tiempo_ejecucion():
|
||||
"""
|
||||
Ejecuta la búsqueda y devuelve
|
||||
- La busqueda
|
||||
- El contador
|
||||
- El tiempo de ejecución
|
||||
"""
|
||||
|
||||
inicio = time.time()
|
||||
busqueda_serie()
|
||||
final = time.time()
|
||||
tiempo_total = math.ceil(final - inicio)
|
||||
|
||||
return tiempo_total
|
||||
|
||||
|
||||
print(f'\n{fecha_hoy()}')
|
||||
|
||||
print("""
|
||||
NOMBRE ARCHIVO\t| NRO. SERIE\t| UBICACIÓN DEL FICHERO
|
||||
--------------\t| ----------\t| ---------------------""")
|
||||
for f in busqueda_serie():
|
||||
print(f)
|
||||
|
||||
print(f'\nNúmeros encontrados: {len(busqueda_serie())}')
|
||||
print(f'Duración de la búsqueda: {tiempo_ejecucion()} seg.\n')
|
BIN
dia_09/Proyecto+Dia+9.zip
Normal file
BIN
dia_09/Proyecto+Dia+9.zip
Normal file
Binary file not shown.
0
dia_09/carpeta_superior/carpeta_1/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_1/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_1/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_1/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_1/fichero3
Normal file
0
dia_09/carpeta_superior/carpeta_1/fichero3
Normal file
0
dia_09/carpeta_superior/carpeta_2/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_2/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_2/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_2/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero1
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero2
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero3
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero3
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero4
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero4
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero5
Normal file
0
dia_09/carpeta_superior/carpeta_3/fichero5
Normal file
0
dia_09/carpeta_superior/fichero1
Normal file
0
dia_09/carpeta_superior/fichero1
Normal file
0
dia_09/carpeta_superior/fichero2
Normal file
0
dia_09/carpeta_superior/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero3
Normal file
0
dia_09/extraccion_terminada/carpeta_1/fichero3
Normal file
0
dia_09/extraccion_terminada/carpeta_2/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_2/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_2/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_2/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero1
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero2
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero3
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero3
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero4
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero4
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero5
Normal file
0
dia_09/extraccion_terminada/carpeta_3/fichero5
Normal file
0
dia_09/extraccion_terminada/fichero1
Normal file
0
dia_09/extraccion_terminada/fichero1
Normal file
0
dia_09/extraccion_terminada/fichero2
Normal file
0
dia_09/extraccion_terminada/fichero2
Normal file
9
dia_09/mi_texto_A.txt
Normal file
9
dia_09/mi_texto_A.txt
Normal file
@ -0,0 +1,9 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla accumsan feugiat elit, sit amet consequat elit efficitur congue. Maecenas et turpis turpis. Pellentesque viverra nulla orci, non ornare neque dapibus ultricies. Pellentesque molestie semper augue, a tristique risus pulvinar eget. Nunc vulputate eget magna eu accumsan. Vestibulum ante dolor, varius vel lorem non, cursus dapibus lectus. Morbi et metus sollicitudin, tincidunt neque sed, faucibus augue. Sed felis diam, ullamcorper ac consequat eu, dictum nec purus. Phasellus ultricies nisi arcu, id consequat lorem suscipit at. Nulla facilisi.
|
||||
|
||||
Proin ultrices maximus ipsum eu ultricies. Cras consequat elit in lorem posuere euismod. Etiam nec enim ac urna aliquam facilisis ut in elit. Mauris sagittis libero justo, sed tempus lacus bibendum eu. Sed sit amet posuere sapien, vel iaculis nulla. Morbi bibendum turpis sed turpis fringilla, sit amet aliquet libero cursus. Nam consequat odio aliquet, scelerisque enim a, fringilla ligula. Donec varius lacus ut arcu finibus, id consectetur sapien consequat. Aliquam quam libero, iaculis vel justo a, facilisis porttitor velit. Vivamus sit amet scelerisque ipsum. Donec lobortis, leo nec eleifend viverra, mi erat tristique ligula, et tristique urna ipsum id arcu. Aenean sem ipsum, aliquet eget odio vitae, pellentesque blandit massa. Maecenas odio nibh, tempus sed aliquam non, laoreet quis diam. Ut ac aliquam massa, sit amet tristique tortor. Morbi ornare elit nec tellus convallis, sit amet tempus diam volutpat. Aliquam ac molestie dolor, eget sollicitudin neque.
|
||||
|
||||
Nullam fermentum, ipsum sed consectetur dapibus, ligula nisl pretium turpis, at condimentum magna elit vitae tellus. Nullam semper ipsum a porta lacinia. Mauris ex tortor, auctor eget nunc at, imperdiet scelerisque est. In hendrerit odio vitae sem ullamcorper consectetur. Praesent quis ornare tortor. Vestibulum accumsan metus erat, sed bibendum enim cursus quis. Praesent libero dui, sagittis quis urna a, sollicitudin viverra ante. Sed congue auctor mi eu ultrices. Curabitur quis finibus eros, sit amet molestie ante. Proin in diam aliquam, porta ante eu, cursus tellus. Sed sodales sem justo, at convallis odio facilisis a. Nam accumsan nisi et finibus vehicula. Nullam pharetra dolor eu nibh congue, non condimentum arcu imperdiet. Nam efficitur dapibus sem et dictum. Praesent euismod erat at convallis ullamcorper. Curabitur ut sem eleifend nunc porta porta.
|
||||
|
||||
Pellentesque malesuada risus eu pharetra tincidunt. Integer at lectus laoreet, venenatis urna ac, porttitor felis. Mauris volutpat pulvinar nulla, a dapibus erat venenatis eu. Sed diam nisi, accumsan et augue id, consequat facilisis elit. Nunc in turpis ut diam aliquet bibendum nec vel velit. Nam vel leo vitae ante fringilla faucibus. Proin condimentum eleifend magna, eleifend consectetur mauris ullamcorper a. Fusce interdum neque id purus volutpat rhoncus. Etiam consequat vehicula faucibus. Etiam vel sollicitudin felis, quis iaculis enim. Aenean ullamcorper a erat vel elementum. Donec eu mattis tortor. Mauris suscipit consequat dui non molestie.
|
||||
|
||||
Integer viverra auctor nunc, et laoreet lacus. Fusce mattis convallis nisl, eu tincidunt lectus iaculis id. Mauris erat metus, pretium ac suscipit id, iaculis id lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas finibus varius mauris, vitae dictum leo viverra quis. Etiam vel massa in lorem tempor rhoncus non ornare magna. Donec eleifend vestibulum nisl sed lobortis. Suspendisse in orci hendrerit, pulvinar nibh at, lacinia nulla. Nullam posuere pharetra nibh. Aliquam metus ipsum, suscipit a sem vitae, gravida vehicula orci. Cras fermentum sapien vitae dapibus feugiat. Morbi eget arcu et nulla pharetra sagittis vitae vel risus. Nulla facilisi. Vestibulum at mi eget dolor luctus iaculis.
|
9
dia_09/mi_texto_B.txt
Normal file
9
dia_09/mi_texto_B.txt
Normal file
@ -0,0 +1,9 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla accumsan feugiat elit, sit amet consequat elit efficitur congue. Maecenas et turpis turpis. Pellentesque viverra nulla orci, non ornare neque dapibus ultricies. Pellentesque molestie semper augue, a tristique risus pulvinar eget. Nunc vulputate eget magna eu accumsan. Vestibulum ante dolor, varius vel lorem non, cursus dapibus lectus. Morbi et metus sollicitudin, tincidunt neque sed, faucibus augue. Sed felis diam, ullamcorper ac consequat eu, dictum nec purus. Phasellus ultricies nisi arcu, id consequat lorem suscipit at. Nulla facilisi.
|
||||
|
||||
Proin ultrices maximus ipsum eu ultricies. Cras consequat elit in lorem posuere euismod. Etiam nec enim ac urna aliquam facilisis ut in elit. Mauris sagittis libero justo, sed tempus lacus bibendum eu. Sed sit amet posuere sapien, vel iaculis nulla. Morbi bibendum turpis sed turpis fringilla, sit amet aliquet libero cursus. Nam consequat odio aliquet, scelerisque enim a, fringilla ligula. Donec varius lacus ut arcu finibus, id consectetur sapien consequat. Aliquam quam libero, iaculis vel justo a, facilisis porttitor velit. Vivamus sit amet scelerisque ipsum. Donec lobortis, leo nec eleifend viverra, mi erat tristique ligula, et tristique urna ipsum id arcu. Aenean sem ipsum, aliquet eget odio vitae, pellentesque blandit massa. Maecenas odio nibh, tempus sed aliquam non, laoreet quis diam. Ut ac aliquam massa, sit amet tristique tortor. Morbi ornare elit nec tellus convallis, sit amet tempus diam volutpat. Aliquam ac molestie dolor, eget sollicitudin neque.
|
||||
|
||||
Nullam fermentum, ipsum sed consectetur dapibus, ligula nisl pretium turpis, at condimentum magna elit vitae tellus. Nullam semper ipsum a porta lacinia. Mauris ex tortor, auctor eget nunc at, imperdiet scelerisque est. In hendrerit odio vitae sem ullamcorper consectetur. Praesent quis ornare tortor. Vestibulum accumsan metus erat, sed bibendum enim cursus quis. Praesent libero dui, sagittis quis urna a, sollicitudin viverra ante. Sed congue auctor mi eu ultrices. Curabitur quis finibus eros, sit amet molestie ante. Proin in diam aliquam, porta ante eu, cursus tellus. Sed sodales sem justo, at convallis odio facilisis a. Nam accumsan nisi et finibus vehicula. Nullam pharetra dolor eu nibh congue, non condimentum arcu imperdiet. Nam efficitur dapibus sem et dictum. Praesent euismod erat at convallis ullamcorper. Curabitur ut sem eleifend nunc porta porta.
|
||||
|
||||
Pellentesque malesuada risus eu pharetra tincidunt. Integer at lectus laoreet, venenatis urna ac, porttitor felis. Mauris volutpat pulvinar nulla, a dapibus erat venenatis eu. Sed diam nisi, accumsan et augue id, consequat facilisis elit. Nunc in turpis ut diam aliquet bibendum nec vel velit. Nam vel leo vitae ante fringilla faucibus. Proin condimentum eleifend magna, eleifend consectetur mauris ullamcorper a. Fusce interdum neque id purus volutpat rhoncus. Etiam consequat vehicula faucibus. Etiam vel sollicitudin felis, quis iaculis enim. Aenean ullamcorper a erat vel elementum. Donec eu mattis tortor. Mauris suscipit consequat dui non molestie.
|
||||
|
||||
Integer viverra auctor nunc, et laoreet lacus. Fusce mattis convallis nisl, eu tincidunt lectus iaculis id. Mauris erat metus, pretium ac suscipit id, iaculis id lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas finibus varius mauris, vitae dictum leo viverra quis. Etiam vel massa in lorem tempor rhoncus non ornare magna. Donec eleifend vestibulum nisl sed lobortis. Suspendisse in orci hendrerit, pulvinar nibh at, lacinia nulla. Nullam posuere pharetra nibh. Aliquam metus ipsum, suscipit a sem vitae, gravida vehicula orci. Cras fermentum sapien vitae dapibus feugiat. Morbi eget arcu et nulla pharetra sagittis vitae vel risus. Nulla facilisi. Vestibulum at mi eget dolor luctus iaculis.
|
BIN
dia_09/todo_comprimido.zip
Normal file
BIN
dia_09/todo_comprimido.zip
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user