# coding: utf8
"""tail.

Écrire une fonction 'copie_fin()' prenant en paramètre deux noms de fichier 
(le premier est le fichier à traiter et le second est le fichier résultat)
et un entier 𝑛 (égal par défaut à 10) représentant un nombre de lignes. 
La fonction recopie les 𝑛 dernières lignes du fichier à traiter dans le fichier 
résultat (on rappelle qu'il est interdit d'avoir l'ensemble du fichier à traiter 
en mémoire — on accepte que les lignes à recopier y soient).

Pour les tests, utiliser le fichier à traiter "data/indata_exo07_bateauivre.txt" 
(Le bateau ivre, Arthur Rimbaud), le fichier résultat "data/out_exo07_07_test.txt" 
et recopier les 9 dernières lignes. 

fichier : s7.py
auteur : Bob
"""

# Définition de fonction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def copie_fin(nomsrc, nomdst, n=10):
    # Chargement des n dernières lignes.
    with open(nomsrc, "r", encoding="utf8") as f_src:
        memo = []
        for ligne in f_src:
            memo.append(ligne)
            if len(memo) > n:
                del memo[0]
    # Écriture de ces lignes.
    with open(nomdst, "w", encoding="utf8") as f_dst:
        for ligne in memo:
            f_dst.write(ligne)

# Programme principal ==========================================================
copie_fin("data/indata_exo07_bateauivre.txt", "data/out_exo07_07_test.txt", 9)

print("Terminé !")
