#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Filtrage des données d'un fichier.

Écrire un script comprenant une fonction :
"filtre(nom_fic_lire, nom_fic_ecrire, seuil_bas, seuil_haut)"
qui prend en paramètre les noms de deux fichiers ainsi que deux valeurs, 
limites basse et haute, et qui écrit dans le fichier de nom "nom_fic_ecrire"
les lignes du fichier de nom "nom_fic_lire" qui contiennent une valeur numérique 
située hors des deux seuils (seuils non compris).
Comme cette fonction doit pouvoir travailler sur des fichiers très volumineux, 
il est interdit de charger en mémoire l'ensemble du contenu du fichier 
"nom_fic_lire" au même moment.

Pour les tests, utiliser le fichier de données "data/indata_exo07_hors_bande.txt" 
et créer le fichier de données filtrées "data/out_exo07_14_res.txt". 
On prendra l'intervalle à exclure suivant : [30.0, 70.0].

Le script comportera un auto-test de vérification de la fonction.

fichier : s14.py
auteur : Bob
"""

# Définition de fonction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def filtre(nom_fic_lire, nom_fic_ecrire, seuil_bas, seuil_haut):
    with (open(nom_fic_lire, encoding="utf8") as f_in, 
          open(nom_fic_ecrire, 'w', encoding="utf8") as f_out):
        for x in f_in:
            f_x = float(x)
            if (f_x < seuil_bas) or (f_x > seuil_haut):
                f_out.write(f"{str(f_x)}\n")

# Auto-test ====================================================================
if __name__ == '__main__' :    
    f_data_in = 'data/indata_exo07_hors_bande.txt'
    f_data_out = 'data/out_exo07_14_res.txt'
    seuil = {
        "bas": 30.0,
        "haut":70.0
    }
    
    # filtrage
    filtre(f_data_in, f_data_out, seuil["bas"], seuil["haut"])

    print("Filtrage terminé.")
