#! /usr/bin/python3
# Last edited on 2018-11-08 18:49:45 by stolfilocal

import os, sys, re
from sys import stderr 

def le_cadastro(nome_arq):
  """Le cadastro de alunos de arquivo com nome {nome_arq}.  Devolve uma lista de
  dicionarios, cada um com campos de chaves "RA" (valor: inteiro), 
  "nome" (valor: string) e "nota" (valor: float).  Ignora
  linhas em branco e comentarios iniciados com "#"."""
  arq = open(nome_arq, 'r')
  L = []
  while True:
    C = le_aluno(arq) 
    if C == None: 
      arq.close()
      return L
    L = L + [ C ]
  ######################################################################

def le_aluno(arq):
  """Le dados do proximo aluno do arquivo {arq}.  Ignora linhas em branco
  e comentarios iniciados com "#".  Se não houver mais alunos em {arq},
  devolve {None}."""
  
  while True:
    s = arq.readline()
    if s == "":
      # Acabou o arquivo.
      return None
    s = re.sub(r'[#].*$', '', s)
    s = s.strip()
    if s != "":
      # Leu alguma coisa:
      return analisa_aluno(s)
  ######################################################################
  
def analisa_aluno(s):
  """Decompoe a cadeia {s} nos campos RA, nome, e nota.  Devolve esses
  campos na forma de um dicionario."""
  
  T = re.split(r'[ ]+', s)
  assert len(T) == 3
  return { "RA": int(T[0]), "nome": T[1], "nota": float(T[2]) }
  ######################################################################
  
  
CAD = le_cadastro("cadastro.txt")
print(CAD)
