TP : Python et les textes
Article mis en ligne le 5 octobre 2016 par C GIBERT
Imprimer cet article logo imprimer

PYTHON Lire et écrire un fichier texte

Introduction

Pour garder des résultats donnés par un programme, pour coder des documents importants, il est indispensable de savoir manipuler des fichiers avec PYTHON. Dans un premier temps, nous allons manipuler des fichiers ne contenant que du texte (chaînes de caractères).

Exemple

Tapez et exécutez le programme suivant :

suite=[1,1]
n=30
for k in range(n):
   suivant=suite[k]+suite[k+1]
   suite.append(suivant)
print(suite)

A quoi cela vous fait-il penser ?

Imaginons qu’un ami, Archibal, qui n’y connaît rien en programmation, vous demande de lui envoyer par courriel la liste des 300 premiers termes. Vous voulez lui répondre, sans trop vous fatiguer.

Instructions

L’instruction basique qui crée un fichier est :

fichier=open("nom avec chemin ",'w')

  • fichier est le nom de votre fichier dans le programme python
  • " nom avec chemin " est le nom de votre fichier de sortie, du genre « c :/test.txt »
  • w signifie "write", on ouvre le fichier pour écrire dedans. D’autres modes existent (lecture, …)

Attention, si un fichier du même nom existe déjà dans le répertoire il sera écrasé sans aucune alerte !!!!!!

Pour écrire les infos dans le fichier, c’est simple : fichier.write("info")

Et on finit toujours (que ce soit en lecture ou écriture) par : fichier.close()

Complétez le programme précédent en ajoutant ces 4 lignes :

fichier=open("fibonacci.txt",'w')
for terme in suite:
  fichier.write(str(terme))
fichier.close()

Exécutez le programme, ouvrez le fichier "fibonacci.txt" et constatez le carnage ! Python a écrit tous les nombres à la suite. Il faut ajouter après chaque nombre le "caractère" qui produit un passage à la ligne : "\n".

fichier=open("fibonacci.txt",'w')
for terme in suite:
  fichier.write(str(terme)+"\n")
fichier.close()

Exercice

Vous allez créer pour votre ami un beau fichier. D’abord, il faut pouvoir choisir le nombre de termes de la suite de Fibonacci, ainsi que le prénom de votre ami. Et puis mettre quelques mots dans votre texte ! Votre fichier texte devra ressembler à :

Bonjour mon cher Archibal,
voici la liste des 300 termes demandés:
u(0)=1
u(1)=1
.
.
u(299) = …..

Ce fut un plaisir …….
Ce calcul a été réalisé en … secondes.

De plus votre fichier devra être nommé "Archibal300.txt". (Dépend donc du destinataire et du nombre) Pour calculer le temps mis par python pour effectuer le travail, il faut faire un « import time » et une petite recherche sur Internet.

Lecture d’un fichier

Exemple : on veut savoir combien de fois le mot "peur" contient le livre "le horla" de Maupassant. A-t-on le droit de détenir un tel texte sans payer de droit d’auteur ?

Placez ce fichier texte

texte - 52.3 ko

dans le répertoire qui contient vos programmes python.

On va l’ouvrir avec python et compter les lettres.

fichier=open("lehorla.txt",'r') On ouvre le fichier en lecture r = read

Il y a 2 méthodes principales de lecture, readline et readlines

  • readline lit une ligne à la fois et renvoie une chaîne
  • readlines lit toutes les lignes et renvoie une liste de chaînes.

texte=fichier.readlines() crée une liste appelée texte qui contient chaque ligne du fichier

texte=str(texte) convertit la liste en une seule chaîne.

Dans python on dispose d’un très grand nombre de méthodes pour les chaînes !!!

Ici on va utiliser count("mot"),qui compte le nombre d’occurrences de "mot" dans la chaîne.

Et voici le programme :

fichier=open("lehorla.txt",'r')
texte=fichier.readlines()
fichier.close()
texte=str(texte)
nombre=texte.count("peur")
print("Le Horla contient ",nombre," fois le mot peur")

Exercice

Vous allez ouvrir une œuvre bien plus lourde « Germinal »

texte - 1015.4 ko

, compter pour chaque lettre le nombre d’occurrences. (Dans ce document il n’y a que des lettres majuscules).

Evidemment, vous n’allez pas écrire 26 lignes, mais plutôt une boucle for, en utilisant les fonctions ord et chr qui gèrent le code ASCII des caractères. ord("A")= 65 et chr(65) = "A"……..

En sortie vous écrirez votre rapport dans un fichier texte : rapport_germinal.txt, dont voici un aperçu :

Analyse de Germinal: j'ai trouvé 786296 lettres
Nombre de A = 72409
Nombre de B = 8162
……
J'ai effectué le travail en …….. secondes, même pas peur!

Dans la même rubrique :

Interrogation
le 16 octobre 2018
par C GIBERT
TP : les tris
le 11 janvier 2017
par C GIBERT
TP : récursivité
le 30 novembre 2016
par C GIBERT
TP : Python et les images
le 19 octobre 2016
par C GIBERT

Identification

Calendrier

avril 2019
lunmarmerjeuvensamdim
1234567
891011121314
15161718192021
22232425262728
293012345
Évènements à venir
Pas d'évènements à venir

Articles les plus vus

Statistiques du site

  • Nombre total de visites :
    213437 visiteurs
  • Aujourd'hui :
    19 visiteurs
  • Nombre de pages visitées :
    296255 pages
  • Actuellement en ligne :
    7 visiteurs
  • Ce site contient :
    204 articles
  • Dernier article paru :
    "Cross Solidaire 2019"
    le 9 avril 2019
puce Contact puce Espace rédacteurs puce squelette puce RSS puce Valid XHTML 1.0 Strict
Site réalisé sous SPIP
avec le squelette ESCAL-V2
Version : 2.6.7 [61555]