Ejercicio resuelto con Python - Facturación media con archivos CSV

Python: información fiscal de archivo CSV (ejercicio resuelto)

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:

  1. Permita acceder a los datos de manera automatizada leyendo cada año y obtener la media de la facturación anual.
  2. Permita escribir en un documento txt cada una de la información obtenida del apartado anterior escribiéndolo cronológicamente de mas antiguo a mas moderno.

Explicación del algoritmo

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.

Datos para ejercicio

Los datos son los que se pueden ver en este enlace. Los dejé por separado porque harían muy largo el post.

Leyendo lista de facturación

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.

Imprimir media o promedio

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.

Escribir facturación total por año cronológicamente

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.

Poniendo todo junto

Ejercicio resuelto con Python - Facturación media con archivos CSV
Ejercicio resuelto con Python – Facturación media con archivos CSV

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *