Hoy vamos a resolver un ejercicio con Python en donde vamos a trabajar con diccionarios, archivos CSV y métodos de ordenamiento.
El ejercicio en cuestión dice así:
Se dispone de un CSV con información fiscal de una empresa en diferentes años. Dicha información corresponde a la facturación de la empresa por cada uno de los trimestres.
Se pide escribir en Python que:
Entonces tenemos que leer el CSV y cargarlo a una lista.
Cada elemento de la lista será una fila del CSV pero ya interpretado, así que antes de agregarlo a la lista con append vamos a separarlo con split y convertir sus valores numéricos a floantes y enteros.
Luego de eso ya tendremos una lista con los datos del CSV.
A esta lista ya la podemos recorrer y calcular la media (son 4 trimestres, se suman y se dividen entre 4), además de que ya se puede ordenar o escribir en un archivo.
Los datos son los que se pueden ver en este enlace. Los dejé por separado porque harían muy largo el post.
Comencemos viendo cómo convertir el CSV a lista. Queda así:
def obtener_lista_facturacion():
lista = []
with open(NOMBRE_ARCHIVO) as archivo:
next(archivo)
for linea in archivo:
datos_separados = linea.split(";")
año = int(datos_separados[0])
trimestre1 = float(datos_separados[1])
trimestre2 = float(datos_separados[2])
trimestre3 = float(datos_separados[3])
trimestre4 = float(datos_separados[4])
lista.append({
"año": año,
"trimestre1": trimestre1,
"trimestre2": trimestre2,
"trimestre3": trimestre3,
"trimestre4": trimestre4,
})
return lista
Por cierto, en la línea 4 estamos omitiendo el encabezado del archivo.
Ahora que ya tenemos el CSV como una lista de Python podemos calcular la media, que es la suma de los elementos entre la cantidad de los mismos.
El código queda así:
def imprimir_años_con_media():
lista = obtener_lista_facturacion()
for elemento in lista:
año = elemento["año"]
media = (elemento["trimestre1"] + elemento["trimestre2"] +
elemento["trimestre3"] + elemento["trimestre4"]) / 4
print(f"Año {año} facturación media de {media} euros")
Simplemente invocamos a la lista anterior y la recorremos. Luego calculamos la media en la línea 5 y la imprimimos en la línea 7.
Ahora veamos el último punto de este ejercicio en Python. Debemos obtener la facturación total del año, ordenarla por año de manera descendente y luego escribirla en un archivo.
En este caso usaré el método de la burbuja para el ordenamiento, pero se podría usar cualquiera de los que aparecen en mi otro post.
Una vez que la lista está ordenada, la escribimos en un archivo.
def burbuja(arreglo):
longitud = len(arreglo)
for i in range(longitud):
for indice_actual in range(longitud - 1):
indice_siguiente_elemento = indice_actual + 1
if arreglo[indice_actual]["año"] < arreglo[indice_siguiente_elemento]["año"]:
arreglo[indice_siguiente_elemento], arreglo[indice_actual] = arreglo[indice_actual], arreglo[indice_siguiente_elemento]
def guardar_años_cronologicamente():
lista = obtener_lista_facturacion()
burbuja(lista)
with open(NOMBRE_ARCHIVO_ESCRITURA, "w", encoding="utf-8") as archivo:
for elemento in lista:
año = elemento["año"]
total = (elemento["trimestre1"] + elemento["trimestre2"] +
elemento["trimestre3"] + elemento["trimestre4"])
archivo.write(f"Año {año} facturación anual de: {total} euros.\n")
Toma en cuenta que en este caso estamos escribiendo la facturación anual total, y para el caso anterior era la media de los 4 trimestres.
El código completo queda como se ve a continuación. Recuerda que necesitas el archivo CSV en la misma ubicación que el script de Python para que esto funcione.
# https://parzibyte.me/blog
NOMBRE_ARCHIVO = "datos.csv"
NOMBRE_ARCHIVO_ESCRITURA = "documento.txt"
def obtener_lista_facturacion():
lista = []
with open(NOMBRE_ARCHIVO) as archivo:
next(archivo)
for linea in archivo:
datos_separados = linea.split(";")
año = int(datos_separados[0])
trimestre1 = float(datos_separados[1])
trimestre2 = float(datos_separados[2])
trimestre3 = float(datos_separados[3])
trimestre4 = float(datos_separados[4])
lista.append({
"año": año,
"trimestre1": trimestre1,
"trimestre2": trimestre2,
"trimestre3": trimestre3,
"trimestre4": trimestre4,
})
return lista
def imprimir_años_con_media():
lista = obtener_lista_facturacion()
for elemento in lista:
año = elemento["año"]
media = (elemento["trimestre1"] + elemento["trimestre2"] +
elemento["trimestre3"] + elemento["trimestre4"]) / 4
print(f"Año {año} facturación media de {media} euros")
def burbuja(arreglo):
longitud = len(arreglo)
for i in range(longitud):
for indice_actual in range(longitud - 1):
indice_siguiente_elemento = indice_actual + 1
if arreglo[indice_actual]["año"] < arreglo[indice_siguiente_elemento]["año"]:
arreglo[indice_siguiente_elemento], arreglo[indice_actual] = arreglo[indice_actual], arreglo[indice_siguiente_elemento]
def guardar_años_cronologicamente():
lista = obtener_lista_facturacion()
burbuja(lista)
with open(NOMBRE_ARCHIVO_ESCRITURA, "w", encoding="utf-8") as archivo:
for elemento in lista:
año = elemento["año"]
total = (elemento["trimestre1"] + elemento["trimestre2"] +
elemento["trimestre3"] + elemento["trimestre4"])
archivo.write(f"Año {año} facturación anual de: {total} euros.\n")
def main():
opciones = "1. Imprimir años con media\n2. Guardar años cronológicamente\n3. Salir\nElige: "
eleccion = ""
while eleccion != "3":
eleccion = input(opciones)
if eleccion == "1":
imprimir_años_con_media()
elif eleccion == "2":
guardar_años_cronologicamente()
main()
Te dejo más ejercicios de Python en mi blog en caso de que quieras aprender más sobre este maravilloso lenguaje.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.