Python - Dudas extracción de datos archivo CSV

 
Vista:

Dudas extracción de datos archivo CSV

Publicado por julio (1 intervención) el 29/06/2021 11:57:24
Se trata de un ejercicio por el cual debo de calcular la nota final de cada alumno. Esta se basa en un registro de nombre, apellido, control 1, control 2, examen final tal que así: (cada dato separado por comas)

Vicente,Vigalondo Mieses,8,5.25,7.5
Edwin,Casal Septiem,5.25,4,5


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Definimos la función que calcula la nota final de cada alumno, teniendo en cuenta los
# criterios de evaluación que se exponen en el ejercicio:
 
def calcula_nota_final(control1, control2, examen):
    '''Esta función toma como parametros 3 notas de examen y calcula la
    nota final según los criterios de evaluación. Si el examen final es mayor o
    igual que 5, entonces se aplicará una regla; si es menor a 5, la nota final
    será igual a la obtenida en el examen final.
    '''
 
    if examen >= 5:
        aprobado = round(((control1) * 0.1) + ((control2) * 0.1) + ((examen) * 0.8), 2)
    else:
        suspenso = examen
 
# En segundo lugar, definimos la función que extrae datos del fichero, línea a línea:
 
def extrae_datos(linea):
    '''Esta función devuelve cada uno de los valores que lee en cada linea
    y elimina el caracter que separa a cada dato en el archivo CSV. Además,
    debe devolver las 3 notas de cada alumno en formato de numero
    '''
    # Con esto rompemos la cadena de texto y desagregamos los datos
    elementos = linea.split(',')
 
    # Extraemos los datos de cada línea:
 
    nombre = elementos[0]
    apellidos = elementos[1]
    control1 = elementos[2]
    control2 = elementos[3]
    examen = elementos[4]
 
    examen = [float(x) for x in examen]
 
    return nombre, apellidos, control1, control2, examen
 
# Una vez hemos comprobado que las dos funciones anteriores funcionan correctamente, nos dispondremos
# a fabricar la última función. El mecanismo de esta función será el siguiente: toma como parámetro el nombre
# del archivo CSV y haciendo uso de las dos funciones auxiliares anteriores, escribirá en la consola
# el aprobado o no de cada alumno y su correspondiente nota final redondeada.
 
def calcula_notas_finales(nombre_fichero):
    '''Lee los datos de cada linea del fichero de notas de CSV e
    imprime en la consola la nota final de cada uno de los alumnos.
    En caso de que suspendan, también lo especificará.
    '''
    # A continuación abrimos el fichero en modo lectura:
    with open(nombre_fichero, encoding= 'utf-8') as f:
        for linea in f:
            # invocamos a extrae_datos para conseguir la info de cada alumno
            nombre, apellidos, control1, control2, examen = extrae_datos(linea)
 
            # invocamos a calcula_nota_final para obtener la calificación final
            control1, control2, examen = calcula_nota_final(control1, control2, examen)
 
            if examen >= 5:
                print(nombre, apellidos, calcula_nota_final(linea), 'aprobado')
            else:
                print(nombre, apellidos, calcula_nota_final(linea), 'suspenso')
 
calcula_notas_finales('notas.csv')

El error que me aparece es que no puedo comparar una cadena con un numero, pero no consigo realizar correctamente la conversión de la cadena a numero:

examen = [float(x) for x in examen]
ValueError: could not convert string to float: '.'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Dudas extracción de datos archivo CSV

Publicado por algoritmo (245 intervenciones) el 29/06/2021 18:46:50
Hola

No veo clara la sentencia, mediante la cual 'desglosas' el contenido del texto 'examen':

Ej:

examen = '5.25'
for x in examen:
print x

Obtendrás:
5
.
2
5

El punto te da el problemas que mencionas.

Un saludo. Espero que te sirva :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar