TD 8 - Manipulation de Fichiers Informatique MPSI/PCSI - Lycée Thiers
Exercice 1 /
/ Exercice 1 : / En python, créer un fichier essai.txt (à l aide de la commande f = open( essai.txt, w ), dans lequel on écrira quelques lignes. Retrouver ce fichier sur votre ordinateur, et l ouvrir (en double-cliquant sur son icône) pour vérifier son contenu. Solution : f = open( essai.txt, w ) f.write( une première ligne\n ) f.write( une deuxième ligne ) f.close()
Exercice 2 : Copier le fichier FichierNumerique.txt sur votre ordinateur. Le sauvegarder dans le répertoire utilisateur (celui portant votre nom de login). Il s agit d un fichier texte de données numériques. Chaque ligne comporte deux valeurs séparées par un point virgule ; représentant l abscisse et l ordonnée d un point du plan, selon le schéma suivant : 1.0;0.0 0.994207555394;0.0797868464861 0.976963690375;0.15782242334
Exercice 2 : 1. Ecrire un script permettant de récupérer les abscisses dans une liste LX et les ordonnées dans une liste LY. Ainsi on aura : >>> LX [1.0, 0.994207555394, 0.976963690375,...] >>> LY [0.0, 0.0797868464861, 0.15782242334,...] 2. On pourra alors tracer la courbe joignant tous les points en saisissant le code suivant : import matplotlib.pyplot as plt plt.plot(lx,ly) plt.axis( equal ) plt.show()
Exercice 2 : 1) file = open( FichierNumerique.txt, r ) LX, LY = [], [] for ligne in file: Lxy = ligne.split( ; ) LX.append(float(Lxy[0])) LY.append(float(Lxy[1])) file.close() 2) import matplotlib.pyplot as plt plt.axis( equal ) plt.plot(lx,ly) plt.show()
Exercice 2 :
Exercice 3 : Copier le fichier TexteCrypte.txt sur votre ordinateur. Le sauvegarder dans le répertoire utilisateur (celui portant votre nom de login). Il s agit d un fichier texte contenant un texte célèbre qui a été crypté à l aide d un chiffrement de César (dont on ne connait pas la clé). On souhaite le décrypter, le lire, et sauvegarder le texte déchiffré dans un fichier texte. Pour cela on procèdera en écrivant un script qui réalise les actions suivantes :
Exercice 3 : 0. Recopier en début de programme les fonctions écrites au TD7 sur le chiffrement de César. 1. Ouvrir le fichier TexteCrypte.txt en mode d accès lecture ( r ). 2. Récupérer dans une variable phrase sa première ligne. 3. Dans une boucle for faire varier une variable cle de 1 à 25. 4. Au sein de la boucle : a. Afficher à l écran phrase décryptée à l aide de la clé de chiffrement cle. b. Attendre la saisie de l utilisateur d une chaine de caractère (à l aide de saisie = input()). c. Si saisie n est pas la chaine vide (""), arrêter le déroulement de la boucle (à l aide de l instruction break). 5. En sortie de boucle : a. Récupérer dans une variable texte l intégralité du texte crypté. b. Le décrypter à l aide de la clé obtenue. c. Sauvegarder le texte décrypté dans un nouveau fichier TexteDecrypte.txt. d. Penser à refermer tous les fichier ouverts.
Exercice 3 : On commence par copier/coller les fonctions écrites au TD7 pour le chiffrement de César : def Crypt(c,n): if ord( A ) <= ord(c) <= ord( Z ): return chr(ord( A )+(ord(c)-ord( A )+n)%26) elif ord( a ) <= ord(c) <= ord( z ): return chr(ord( a )+(ord(c)-ord( a )+n)%26) else : return c def CesarCrypt(S,n): Scrypt = for char in S: Scrypt += Crypt(char,n) return Scrypt def CesarDeCrypt(S,n): return CesarCrypt(S,-n)
Exercice 3 : txt = open( TexteCrypte.txt, r ) # Ouverture en lecture seule ligne = txt.readline() # Lecture premiere ligne for cle in range(1,26): print(cesardecrypt(ligne,cle)) r = input() if r!= : break texte = ligne + txt.read() # Ne pas oublier la premiere ligne textedecrypte = CesarDeCrypt(texte,cle) # Decryptage print("decryptage :") print("------------") print(textedecrypte) file = open( TexteDecrypte, w ) # Création nouveau fichier file.write(textedecrypte) # Ecriture texte decrypté file.close() txt.close()
Exercice 3 : Decryptage : ------------ Ce qui fut cause que je pensai qu il fallait chercher quelque autre methode, [...] j aurais assez des quatre suivants, pourvu que je prisse une ferme et constante resolution de ne manquer pas une seule fois a les observer. Le premier etait de ne recevoir jamais aucune chose pour vraie, que je ne la connusse evidemment etre telle : c est-a-dire, d eviter soigneusement la precipitation et la prevention; et de ne comprendre rien de plus en mes jugements, que ce qui se presenterait si clairement et si distinctement a mon esprit, que je n eusse aucune occasion de le mettre en doute. Le second, de diviser chacune des difficultes que j examinerais, en autant de parcelles qu il se pourrait, et qu il serait requis pour les mieux resoudre. Le troisieme, de conduire par ordre mes pensees, en commencant par les objets les plus simples et les plus aises a connaitre, pour monter peu a peu, comme par degres, jusques a la connaissance des plus composes; et supposant meme de l ordre entre ceux qui ne se precedent point naturellement les uns les autres. Et le dernier, de faire partout des denombrements si entiers, et des revues si generales, que je fusse assure de ne rien omettre. Rene Descartes, Discours de la Methode.
Exercice 4 : Ecrire un éditeur de texte minimaliste : à l appel de edt() le programmera attendra la saisie de texte par l utilisateur, dont il écrira toutes les lignes dans un fichier texte. Dès que l utilisateur saisira une ligne vide (en appuyant sur ENTREE), la saisie de texte s achèvera et le programme demandera le nom du fichier à sauvegarder.
Exercice 4 : Editeur de texte def edt(): liste = [] while True: ligne = input() if ligne == "": break else: liste.append(ligne + \n ) if len(liste) > 0: nom = input("nom du fichier à sauvegarder : ") f = open(nom, w ) f.writelines(liste) f.close()
Exercice 4 : Editeur de texte
Exercice 5 : Pourriez-vous écrire un script qui compte dans le fichier TexteDecrypte.txt le nombre de mots, ainsi que le nombre de caractères contenus dans le texte : les mots seront définis comme toute suite de lettres minuscules ou majuscules non accentuées. les caractères blancs ( ) et de fin de ligne ne seront pas comptabilisés.
Exercice 5 : f = open( TexteDecrypte, r ) texte = f.read() mots = 0 caracteres = 0 flag = False for car in texte: if car!= and car!= \n : caracteres += 1 if a <= car <= z or A <= car <= Z : if flag == False: flag = True mots += 1 else: flag = False print("nombre de mots :",mots) print("nombre de caractères :",caracteres) f.close()
Exercice 5 : Nombre de mots : 216 Nombre de caractères : 1017