# -*- encoding:utf-8 -*-

# Calculateur des fréquences d'apparition de chacune des lettres de
# l'alphabet dans un fichier

# Fonctions nécessaires:

def supprimeAccent(car):
    """
    supprimeAccent(str car) --> str
    Retourne le caractère <car> (supposé minuscule)
    sans accent et en minuscule
    """
    car = car.lower()               # mise en minuscule du caractère
    dico = {'a':['à', 'ä', 'â'], 'c':['ç'], 'e':['é', 'è', 'ê', 'ë'],\
            'i':['î', 'ï', 'ì'], 'o':['ô', 'ò', 'ö'], 'u':['û', 'ù', 'ü']}

    for cle in dico:
        if car in dico[cle]:
            return cle

    return car

def frequence(source, destination):
    """
    frequence(str source, str destination) --> None
    Calcule la fréquence d'apparition de chacun des lettres de
    l'alphabet dans le fichier <source> et retourne les résultats
    dans le fichier destination au format lettre@frequence%
    """

    try:
        Input = open(source, 'r', encoding='utf-8')

    except:
        print('Le fichier', source, "n'existe pas.")

    else:

        # Construction du dictionnaire des effectifs de chaque lettre:
        
        freq = {}                                               # dictionnaire des effectifs de chaque caractère
                                                                # alphabétique supposé en minuscule
        ligne = Input.readline().lower()                        # prochaine ligne à traiter (en minuscules)
        c = 0                                                   # compteur du nombre de caractères traités

        while ligne != "":

            for car in ligne:
                car = supprimeAccent(car)                       # suppression de l'accent éventuel
                if 97 <= ord(car) <= 122:                       # ne traiter que les lettres de l'alphabet
                    c += 1
                    freq[car] = freq.get(car, 0) + 1            # augmentation du nbre d'occurrences de 1

            ligne = Input.readline().lower()

        Input.close()

        # Ecriture des fréquences dans le fichier de sortie

        Output = open(destination, 'w', encoding='utf-8')

        liste = list(freq.items())
        liste.sort()                    # tri alphabétique des lettres

        for car, freq in liste:
            ligne = "{lettre}@{frequence:5.3f}%".format(lettre=car, frequence=(freq/c)*100)
            Output.write(ligne+"\n")

        Output.close()

# Programme principal 

entree = input("Fichier à analyser: ")
sortie = input("Fichier d'enregistrement: ")

frequence(entree, sortie)

print("Fréquences d'apparition des caractères alphabétiques dans le fichier: ")

fichier = open(sortie, 'r', encoding='utf-8')
ligne = fichier.readline()

while ligne != "":
    lettre, freq = ligne.split('@')
    print("{caractere} : {pourcentage} %".format(caractere=lettre, pourcentage=freq[:-2]))
    ligne = fichier.readline()

input("Appuyez sur une touche pour fermer la fenetre !")
