Formation I.S.N.

Les fichiers - Exercices

Pour réaliser certains des exercices ci-dessous, il faut télécharger le fichier texte dico.txt qui contient environ 336 500 mots de la langue française, avec un mot écrit (en minuscule et sans accent) par ligne ainsi que le texte original et non accentué du Petit Chaperon Rouge écrit par Charles Perrault et libre de droit.

Espacer les lettres

  1. Placez le fichier dico.txt dans le répertoire courant.
  2. Définissez une fonction espace() qui insère un espace entre chaque caractère d'un texte entré comme argument.
  3. Pour chaque mot lu dans le dictionnaire dico.txt, le programme doit écrire, dans un fichier dico2.txt à définir, ce mot en insérant un espace entre chaque caractère.
    Par exemple, si le mot d'originie était caligraphie, le mot correspondant dans dico2.txt sera c a l i g r a p h i e.
  4. Comparez les poids en octets de ces deux fichiers. Est-ce cohérent ?
  • Une piste
  • La fonction espace()
  • Une solution
On lit chaque ligne (donc chaque mot) de dico.txt. On insère ensuite un espace entre chaque lettre de ce mot puis on écrit le nouveau mot ainsi obtenu dans le fichier dico2.txt.

def espace(texte):
    """ Entrees : texte est une chaîne de caractères
        Sorties : retourne cette chaîne avec un espace inséré entre chaque caractère."""
    chaine = ''							# le mot espacé à retourner
    for carac in texte:
        chaine = chaine + carac + " "
    return chaine

Un espace est codé sur un octet. Il y a dans dico2.txt deux fois plus de caractères que dans dico.txt donc il semble logique que dico2.txt ait environ le double de poids que dico.txt.


##----- Définition des Fonctions -----##
def espace(texte):
    """ Entrees : texte est une chaîne de caractères
        Sorties : retourne cette chaîne avec un espace inséré entre chaque caractère."""
    chaine = ''							# le mot espacé à retourner
    for carac in texte:
        chaine = chaine + carac + " "
    return chaine


##----- Programme principal -----##
f = open('dico.txt', 'r')
g = open('dico2.txt', 'w')				# Création du fichier

for mot in f:
	mot = espace(mot)
	g.write(mot)						# Le dernier caractère de mot est '\n'

##----- Fermeture des fichiers -----##
f.close()
g.close()

Compter les lettres

Placez le texte du « Petit Chaperon Rouge » dans le répertoire courant.

Concevoir un programme qui lit le contenu de ce fichier et qui renvoie le nombre d'occurences de chaque lettre contenue dans ce fichier, c'est-à-dire le nombre de 'a', le nombre de 'b', le nombre de 'c', etc... Il ne faudra tenir compte ni des espaces, ni de la ponctuation, ni des majuscules.

L'affichage final attendu sera :

Le texte contient :
551 a
55 b
130 c
219 d
1039 e
65 f
98 g
79 h
461 i
34 j
0 k
408 l
131 m
380 n
369 o
185 p
73 q
464 r
403 s
537 t
449 u
82 v
0 w
22 x
8 y
6 z
  • Une piste
  • Une autre piste
  • Une solution
list('abcdefghijklmnopqrstuvwxyz') est une instruction très intéressante pour ce programme...
Avoir un deuxième liste de stockage du nombre de chaque caractère semble indispensable. Pour cela, l'instruction [0]*26 est utile...

##----- Ouverture des fichiers -----##
fsource = open('Petit_Chaperon_Rouge.txt', 'r')


##----- Variables et constantes -----##
liste = list('abcdefghijklmnopqrstuvwxyz')
resultats = [0]*26


##----- Programme principal -----##
for ligne in fsource:
    for carac in ligne:
        if carac in liste:
            indice = liste.index(carac)
            resultats[indice] += 1

print('Le texte contient :')
for i, x in enumerate(liste):
    print(resultats[i], x)

fsource.close()