NSI, codage de cesar : lecture et ecriture de fichiers .txt en python

1. Mise en place

Créer un dossier TP_codage_Cesar et y placer le fichier ci-dessous :

Créer un fichier python nommé TP_codage_Cesar avec le code ci-dessous :

# ouvre un fichier situé dans le même répertoire en mode lecture : read
fichier = open("texte_a_coder.txt", 'r') 
print(fichier)
fichier.close() # ne pas oublier de fermer le fichier

Enregistrer le programme dans votre dossier et tester le.

2. Accéder au contenu et problème de codage.

Modifier votre programme en :

fichier = open("texte_a_coder.txt", 'r')
print(fichier)
contenu=fichier.read() # on accède au contenu du fichier
print(contenu)
fichier.close()
    

On résout le problème d’encodage :

fichier = open("texte_a_coder.txt", 'r',encoding='UTF-8')
print(fichier)
contenu=fichier.read() # on accède au contenu du fichier
print(contenu)
fichier.close()

3. On préfère utiliser le with

with open('texte_a_coder.txt', 'r', encoding='UTF-8') as entree:
    lignes=entree.readlines() # on lit toutes les lignes du fichier
    print(lignes) # lignes est une liste un peu particulière
    for ligne in lignes: # on parcourt les lignes du fichier
        print(ligne)
    

4. On supprime les passages à la ligne inutiles

with open('texte_a_coder.txt', 'r', encoding='UTF-8') as entree:
    lignes=entree.readlines()
    print(lignes)
    for ligne in lignes:
        ligne_a_coder=ligne.strip('\n') # on supprime les renvois à la ligne
        print(ligne_a_coder)
    

5. on ouvre un fichier en écriture pour y coder le texte

# avec les systèmes Windows : cp1252.
cle=2

def codage_cesar(txt,cle):
    '''
    txt : str
    cle :int
    return : txt codé selon un décalage déterminé par la clé
    >>>codage_cesar("abAB",2)
    "cdCD"
    '''
    retour=""
    for caract in txt:
        retour+=chr(ord(caract)+cle)
    return retour

with open('texte_a_coder.txt', 'r', encoding='UTF-8') as entree:
    with open('texte_code.txt', 'w', encoding='UTF-8') as sortie:
        lignes=entree.readlines()
        for ligne in lignes:
            ligne_a_coder=ligne.strip('\n')
            sortie.write(codage_cesar(ligne_a_coder,cle)+"\n")