💡
Parte Práctica. Informática para Ingeniería
  • Dudas
  • Conceptos básicos. Cuestionario.
  • Practica 4. Utilización try...except:
  • Ejemplo. Ciclos anidados. Tablas de multiplicar
  • Práctica 5. Funciones y Módulos
    • Ejemplo de funciones
    • Análisis funciones. Ejercicio 1. Segundos totales.
    • Crear un programa ejecutable
    • Importar Módulos
  • Ejemplo de funciones. Comprobar NIF correcto
  • Ejemplo funciones y listas.
  • Instalar Numpy
  • Práctica 6. Matrices. Conjuntos
    • Ejemplo, matrices: Suma y Multiplicación (numpy y listas)
    • Ejemplo: Introducir datos en una matrices (Listas y numpy)
    • Análisis del problema de las Tuberías
    • Ejemplo, Conjuntos. Intersección
    • Análisis del ejercicio 3. nombres no repetidos (Conjuntos)
    • Análisis: Ejercicio 3 Complementario (Mátriz).
  • Clase
  • Ejemplo Ficheros o Archivos. Práctica 7.
  • Análisis de la Práctica 7. Fichero o Archivo
  • Ejemplo de base de datos: Sqlite
  • Ejemplo de base de datos. Sqlite 3. Introducir y visualizar datos.
  • Ejemplo. Funciones, matriz. Recuento de votos
  • Ejemplo, GUI Interfaces Gráficas. Cálculo del área de un Triángulo
  • Cuestionario
  • Ejemplo. Cálculo de Nómina mensual
  • Matrices 2ª Prueba Evaluación Continua. Curso 2018-2019 Parcial. Prof MRD
  • Prueba Evaluación Continua. Curso 2018-2019. Examen 1. Prof. MRD
Con tecnología de GitBook
En esta página
  • Enunciado
  • Código "dado en el enunciado"
  • Se pide realizar un programa que:
  • Análisis:
  • Datos del archivo
  • Tomar en cuenta
  • Análisis de la opción 1. Introducir datos por tecleado
  • Análisis del punto 2
  • Código Completo
  • Ejecutarlo

¿Te fue útil?

Análisis de la Práctica 7. Fichero o Archivo

Enunciado

Supongamos que disponemos de un fichero llamado Datos.txt en el que están guardados los datos de un laboratorio desde las 8:00 de la mañana hasta las 20:00 horas de un día, los datos se toman a la hora en punto y a las medias de forma ininterrumpida. Los datos que se recogen son:

  • Hora en formato de horas y minutos como números enteros.

  • Presión atmosférica en milibares en forma de número entero sin decimales.

  • Temperatura en grados Celsius en forma de número con 1 decimal.

  • Humedad relativa en porcentaje en forma de un número con 2 decimales.

  • Número de personas que hay en el laboratorio.

  • Como ejemplo de un dato del fichero podría ser:

8;30;976;17.1;68.35;9

Partiendo de los datos del fichero anterior se quiere una aplicación informática que muestre:

  • ¿Cuál ha sido la media de personas en el laboratorio?

  • ¿Cuál ha sido el máximo número de personas en el laboratorio?

  • ¿A qué hora se ha registrado el máximo número de personas en el laboratorio?

  • ¿Cuál ha sido la temperatura más baja registrada en el laboratorio?

  • ¿Cuál ha sido la temperatura media en el laboratorio?

Código "dado en el enunciado"

fichero=open("c:/tmp/datos041118.txt" ,"r")
totalpersonas=0
contador=0
máximodepersonas=0
totaltemperatura=0
for linea in fichero:
    lista=linea.split(";")
    hora=lista[0]
    minuto=lista[1]
    presión=lista[2]
    temperatura=float(lista[3])
    humedad=float(lista[4])
    personas=int(lista[5])
    totalpersonas+=float(personas)
    if float(personas)>máximodepersonas:
        máximodepersonas=float(personas)
        horamáximodepersonas=hora + ":" + minuto
    if contador==0:
        mínimotemperatura=float(temperatura)
    if float(temperatura)<mínimotemperatura:
        mínimotemperatura=float(temperatura)
    totaltemperatura+=float(temperatura)
    contador+=1
print("Media de personas en el laboratorio: " + str(totalpersonas/contador))
print("Máximo número de personas en el laboratorio: " + str(máximodepersonas) + " a las " + str(horamáximodepersonas))
print("Temperatura más baja en el laboratorio: " + str(mínimotemperatura))
print("Media de temperatura en el laboratorio: " + str(totaltemperatura/contador))
fichero.close()

Se pide realizar un programa que:

  • Solicite el nombre de fichero. Seguidamente solicite los datos para grabar la información del tipo del ejemplo en el citado fichero.

  • Ejecutar el programa del ejemplo sobre el fichero que hemos grabado y observar si da los resultados correctos.

  • Modifica el programa del punto 1 para que pregunte al usuario si quiere crear un fichero de datos nuevo o añadir datos a uno existente. Asegurarse de que no borra por error uno existente y de que existe al que se quiere añadir. A continuación, vuelve a ejecutar el programa ejemplo y observe si los resultados obtenidos son correctos.

  • Resolver utilizando funciones.

Análisis:

  • En función de un menú el usuario elegirá una opción, validar las opciones.

  • Opción 1, pedir al usuario el nombre del archivo con el cuál va a trabajar, en caso de que existe, se le preguntará, si quiere sobrescribirlo o bien añadir.

  • Opción 2. Realizar los cálculos, con los datos del enunciado. O bien con el archivo generado en la opción 1.

Diagrama

Datos del archivo

Tomar en cuenta

Importar los modulos random y os

from random import randint, uniform
import os

Análisis de la opción 1. Introducir datos por tecleado

Pedir el nombre del archivo, y si existe (os.path.exists), que decida el usuario si quiere sobrescribirlo archivo=open(nombredelarchivo,a) o añadir los datos archivo=open(nombredelarchivo,w)

        nombredelarchivo=pedir_nombre_archivo()
        #SE verifica si existe el archivo , si existe quie quiere hacer el usuario, sobreescribirlo o añadir datos
        if os.path.exists(nombredelarchivo):
            bandera=True
            
            while bandera:
                #valisar lo que quier hacer el usuario
                modo_abrir_archivo=input("Ese archivo existe, que quieres hacer?:\nS)Sobreescribirlo o\nA):Añade datos\n ").upper()
                if modo_abrir_archivo in lista_modo_abrir_archivo:
                    bandera=False
                else:
                    print("Tecleaste un modo incorrecto")
            if modo_abrir_archivo=="S":
                tipodeaperturadefichero="w"
            
            else:
                tipodeaperturadefichero="a"    
        else:
            #No existe y por lo tanto se crea
            tipodeaperturadefichero="w"
        #Se abre el archivo
        archivo=open(nombredelarchivo,tipodeaperturadefichero)
        #Se introducen los datos
        introducir_datos(archivo

Análisis del punto 2

Se le pregunta al usuario que quiere hacer, si utilizar el archivo original o el que él creo. Se verifica si existe el archivo os.path.exists(nombredelarchivo), en caso afirmativo, se realizan los cálculos con el código dado en el enunciado.

datos=""
        lista_datos=["O", "P"]
        #Se le pide al usuario si quiere ver el archivo original o trabajar con lo que ha creado
        while datos not in lista_datos:
             datos = input("O) Original )\nP) Propio archivo\n").upper()
             print(datos)
             if datos not in lista_datos:
                 print("Tecleaste un valor incorrecto")
        print(opcion)
        if datos=="P":
            print("Pedir el archivo para realizar los cálculos")
            nombredelarchivo=pedir_nombre_archivo()
        else:
            nombredelarchivo=archivo_ejemplo
        #Si existe el archivo realizao los cálculos sino imprime el mensaje que no existe
        if os.path.exists(nombredelarchivo):    
             original(nombredelarchivo)
        else:
            print("El archivo no existe")

Código Completo

from random import randint, uniform
import os
def Pedir_opcion():
    lista_opcion=["A","B","S"]
    opcion=""
    while opcion not in lista_opcion:
         opcion = input("A)Genera nuevo archivo\nB)Cálculo de datos con el propio archivo o el original \nS)Salir\nTeclea lo que quieres realizar: ").upper()
         if opcion not in lista_opcion:
             print("Tecleaste un valor incorrecto")
    return opcion
def pedir_datos():
    #Pedir los datos al usaurio.
#    presion=float(input("Dame la presión"))
#    temperatura=float(input("Dame la temperatura"))
#    humedad=float(input("dame la humedad"))
#    personas=int(input("dame el número de personas"))
#Que el sistema los genere
     presion = randint(400,500)
     temperatura =round(uniform(15,20),1)
     humedad = round(uniform(40,50),2)
     personas = randint(2,20)
     return presion, temperatura,humedad, personas
def introducir_datos(nombredelarchivo ):
    registro="{};{};{};{};{};{}\n"
    for hora in range(8,21):
                for minuto in [0,30]:
                    if not (hora==20 and minuto==30):
                        presion, temperatura,humedad, personas=pedir_datos()
                        #se genera un dato y se almacena hay dos maneras, resultado igual
                        nombredelarchivo.write(registro.format(hora,minuto,presion,temperatura,humedad,personas))
                        # nombredelarchivo.write(str(hora)+";"+str(minuto)+";"+str(presion)+";"+str(temperatura)+";"+str(humedad)+";"+str(personas)+"\n")

    #cierra el archivo
    nombredelarchivo.close()
def original(archivo_ejemplo):
    #Se abre el archivo en modo lectura y se hacen los cálculos, datos originales
        archivos = open(archivo_ejemplo,"r")
        totalpersonas = 0
        contador = 0
        max_personas = 0
        totaltemperatura = 0
        conta_linea=0
        for linea in archivos:
            lineaData = linea.rstrip().split(";") # rstrip quita el \n que hay a la derecha
            hora = lineaData[0]
            minuto = lineaData[1]
            presion = int(lineaData[2])
            temperatura = float(lineaData[3])
            humedad = float(lineaData[4])
            personas = int(lineaData[5])
            totalpersonas += personas
            if personas > max_personas:
                max_personas = personas
                horamax_personas = hora + ":" + minuto
            if contador == 0 or temperatura < mintemperatura:
                mintemperatura = temperatura
            totaltemperatura += temperatura
            contador += 1
        print("Media de personas en el laboratorio: " + str(round(totalpersonas/contador,2)))
        print("Máximo número de personas en el laboratorio: " + str(int(max_personas)) + " a la hora " + str(horamax_personas))
        print("Temperatura más baja en el laboratorio: " + str(mintemperatura))
        print("Temperatura media en el laboratorio: " + str(round(totaltemperatura/contador,2)))
        #Se cierra el archivo
        archivos.close()
def pedir_nombre_archivo():
    # Se piede el nombre del archivo y se la añade la extensión .txt
    nombredelarchivo=input("Nombre del archivo a trabajar: ")
    nombredelarchivo+=".txt"
    return nombredelarchivo
#Nombre del archivo general
archivo_ejemplo="./datos041118.txt"

opcion=""
lista_modo_abrir_archivo=["S","A"]
while opcion != "s":
    #Se solicta lo que quiere realizar el usuario
    opcion=Pedir_opcion()
    if opcion=="A":
        nombredelarchivo=pedir_nombre_archivo()
        #SE verifica si existe el archivo , si existe quie quiere hacer el usuario, sobreescribirlo o añadir datos
        if os.path.exists(nombredelarchivo):
            bandera=True

            while bandera:
                #valisar lo que quier hacer el usuario
                modo_abrir_archivo=input("Ese archivo existe, que quieres hacer?:\nS)Sobreescribirlo o\nA):Añade datos\n ").upper()
                if modo_abrir_archivo in lista_modo_abrir_archivo:
                    bandera=False
                else:
                    print("Tecleaste un modo incorrecto")
            if modo_abrir_archivo=="S":
                tipodeaperturadefichero="w"

            else:
                tipodeaperturadefichero="a"    
        else:
            #No existe y por lo tanto se crea
            tipodeaperturadefichero="w"
        #Se abre el archivo
        archivo=open(nombredelarchivo,tipodeaperturadefichero)
        #Se introducen los datos
        introducir_datos(archivo)               
    elif opcion=="B":
        datos=""
        lista_datos=["O", "P"]
        #Se le pide al usuario si quiere ver el archivo original o trabajar con lo que ha creado
        while datos not in lista_datos:
             datos = input("O) Original )\nP) Propio archivo\n").upper()
             print(datos)
             if datos not in lista_datos:
                 print("Tecleaste un valor incorrecto")
        print(opcion)
        if datos=="P":
            print("Pedir el archivo para realizar los cálculos")
            nombredelarchivo=pedir_nombre_archivo()
        else:
            nombredelarchivo=archivo_ejemplo
        #Si existe el archivo realizao los cálculos sino imprime el mensaje que no existe
        if os.path.exists(nombredelarchivo):    
             original(nombredelarchivo)
        else:
            print("El archivo no existe")
    elif opcion=="S":
        print("Fin de Programa")
    else:
        print("Tecleaste opción equivocada")

Ejecutarlo

AnteriorEjemplo Ficheros o Archivos. Práctica 7.SiguienteEjemplo de base de datos: Sqlite

Última actualización hace 5 años

¿Te fue útil?

Google Colaboratory
Logo
594B
datos041118.txt