Ouvrir et ajouter du texte dans un fichier existant

Constatation

On suppose avoir créé un fichier nommé table.txt et y avoir inscrit la table du 6 par le programme suivant :

1
def inscrireTable(n) :
2
    f.write('Table du {}.\n'.format(n))
3
    f.write('\n')
4
    for j in range(1,11) :
5
        f.write('{}*{}={}.\n'.format(n,j, n*j))
6
    f.write('\n')
7
    f.write('\n')
8
    
9
10
f=open('tables.txt','w')
11
inscrireTable(6) 
12
f.close()

On aurait pu aussi utiliser with :

1
def inscrireTable(n) :
2
    with open('tables.txt','w') as f :
3
        f.write('Table du {}.\n'.format(n))
4
        f.write('\n')
5
        for j in range(1,11) :
6
            f.write('{}*{}={}.\n'.format(n,j, n*j))
7
        f.write('\n')
8
        f.write('\n')
9
     
10
inscrireTable(6) 

On aimerait maintenant ajouter la table du 7 à ce fichier tables.txt.

La première idée est de lancer :

1
def inscrireTable(n) :
2
    f.write('Table du {}.\n'.format(n))
3
    f.write('\n')
4
    for j in range(1,11) :
5
        f.write('{}*{}={}.\n'.format(n,j, n*j))
6
    f.write('\n')
7
    f.write('\n')
8
    
9
10
f=open('tables.txt','w')
11
inscrireTable(7) 
12
f.close()

Mais en ouvrant le fichier tables.txt, on se rend compte que la table du 6 précédemment inscrite a été écrasée et que seule la table du 7 est inscrite dans notre fichier.

Nous avons en effet ouvert notre fichier avec l'option 'w' dont le rôle est de créer le fichier avant de pouvoir écrire dedans. Si le fichier existait déjà, il est recréé, ce qui signifie que le fichier de même nom qui existait est écrasé au préalable.

Pour pouvoir ajouter du texte à la suite du texte existant, on ouvrira le fichier en mode ajout, c'est à dire avec l'option 'a'.

Ouvrir un fichier en mode ajout

Pour tester cela, recréer le fichier ne contenant que la table du 6 en exécutant :

1
def inscrireTable(n) :
2
    f.write('Table du {}.\n'.format(n))
3
    f.write('\n')
4
    for j in range(1,11) :
5
        f.write('{}*{}={}.\n'.format(n,j, n*j))
6
    f.write('\n')
7
    f.write('\n')
8
    
9
10
f=open('tables.txt','w')
11
inscrireTable(6) 
12
f.close()

Puis ajoutons la table du 7 :

1
def inscrireTable(n) :
2
    f.write('Table du {}.\n'.format(n))
3
    f.write('\n')
4
    for j in range(1,11) :
5
        f.write('{}*{}={}.\n'.format(n,j, n*j))
6
    f.write('\n')
7
    f.write('\n')
8
    
9
10
f=open('tables.txt','a')
11
inscrireTable(7) 
12
f.close()

Ouvrir ensuite le fichier tables.txt avec un éditeur de texte et constater que cette fois, le contenu initial n'a pas été écrasé.

Pour finir, on améliorera notre programme avec with :

1
def inscrireTable(n, nomFichier) :
2
    """
3
    Entrées :
4
         n de type int. 
5
         nomFichier : de type str.
6
    Effet :
7
        Crée le fichier de nom nomFichier s'il n'existe pas.
8
        Inscrit la table de multiplication
9
        de n à la fin du fichier nomFichier.
10
    """
11
    with open(nomFichier,'a') as f :
12
        f.write('Table du {}.\n'.format(n))
13
        f.write('\n')
14
        for j in range(1,11) :
15
            f.write('{}*{}={}.\n'.format(n,j, n*j))
16
        f.write('\n')
17
        f.write('\n')
18
    
19
20
21
nomDuFichier = "monFichierDesTables"
22
inscrireTable(6, nomDuFichier) 
23
inscrireTable(7, nomDuFichier)