Oi, Zé! Como vai?
Agradeço por compartilhar seu código com a comunidade Alura.
A sua solução tá bem organizada, principalmente no uso de with open e na separação das funções de escrever e ler. Um ponto importante é que, na função ler, você usou l['Nota'] em vez de linha['Nota'], o que pode causar erro, e também o parâmetro nota não está sendo utilizado na comparação.
Uma dica interessante para o futuro é usar o método get em dicionários para evitar erros caso a chave não exista.
dados = {'Nome': 'Ana', 'Nota': '8'}
nota = float(dados.get('Nota', 0))
if nota >= 7:
print(dados.get('Nome'))
Esse código pega os valores com segurança, evitando erro caso a chave não exista, e faz a conversão para número antes da comparação.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!