LES FICHIERS : Un fichier stocke des informations sur un support physique (disque dur, clé USB, CD, DVD, carte mémoire SD...). Ouvrir un fichier consiste à le charger dans la mémoire vive (RAM) de l'ordinateur (c'est une mémoire volatile : elle s'efface quand on éteint l'ordinateur). Enregistrer un fichier consiste à l'écrire sur un support physique de stockage (l'information est alors conservée de manière permanente). Il existe deux types de fichiers : • Les fichiers textes : l'information est stockée sous forme de caractères lisibles par un éditeur de texte (principalement des lettres et des chiffres. Ils se manipulent ligne par ligne (ou caractère par caractère). • Les fichiers binaires : l'information est stockée en binaire (une suite d'octets dont la valeur est comprise entre 0x00 et 0xFF). Ils se manipulent octets par octets. S.Loutfi Lecture des fichiers textes: En utilisant un éditeur de texte, créez un fichier nommé fichier_texte.txt contenant un texte . Ouvrez le fichier avec un éditeur hexadécimal Comment l’information est-elle organisée dans le fichier ? S.Loutfi Lecture des fichiers binaires: En utilisant un éditeur de texte, ouvrez le ficher lena.jpg . Ouvrez le fichier avec un éditeur hexadécimal Comment l’information est-elle organisée dans le fichier ? S.Loutfi Les types d'ouverture: Plusieurs modes d’ouvertures sont possibles: r, pour une ouverture en lecture (READ). w, pour une ouverture en écriture (WRITE), à chaque ouverture le contenu du fichier est écrasé. Si le fichier n'existe pas python le crée. a, pour une ouverture en mode ajout à la fin du fichier (APPEND). Si le fichier n'existe pas python le crée. b, pour une ouverture en mode binaire. t, pour une ouverture en mode texte. x, crée un nouveau fichier et l'ouvre pour écriture S.Loutfi Ouverture et lecture d’un fichier texte existant: chaine = fichier.read() : lit le fichier en intégralité et renvoie une chaîne de caractères. chaine = fichier.read(n) : lit n caractères du fichier à partir de la position courante et renvoie une chaîne de caractères. ligne = fichier.readline() : lit une seule ligne à partir de la position courante y compris le '\n' qui est le caractère de fin de ligne ; retourne une chaîne vide quand la fin du fichier est atteinte liste = fichier.readlines() : retourne une liste de toutes les lignes du fichier. S.Loutfi Créer et ouvrir un fichier en mode write ‘w’: Pour écrire dans un fichier, il faut l'ouvrir en mode write (‘w’) ou en mode append(‘a’). Dans les deux cas si le fichier n'existe pas il sera créé dans le répertoire courant. Ensuite il suffit d'appliquer la méthode suivante pour écrire une ligne dans le fichier (avec ajout automatique d’un caractère de fin de ligne) : fichier.write("mon texte ici") mode write (‘w’): (fichier_write.py) Après exécution du script, vérifier bien que le fichier est crée dans le répertoire courant! Remarque: relancer le script en remplaçant «fichier.write('Bonjour à tous !') » par «fichier.write(‘Rebonjour à tous !) » . Le fichier est écrasé et remplacé par le nouveau ! S.Loutfi Créer et ouvrir un fichier en mode append ‘a’: Vérifier que le fichier test_append existe dans le répertoire courant. mode append(‘a’): (fichier_append.py) Après exécution du script, ouvrir le fichier test-append et constatez les changements. S.Loutfi EXERCICE 1 : nombre de A! On veut savoir combien de "A" contient le livre "Germinal" d'Emile Zola ! Le fichier germinal.txt est un fichier texte où toutes les lettres ont été converties en majuscules sans accents. Réaliser un programme permettant de compter le nombre de A dans le texte. Aide : Fichier =open("germinal.txt",'r') ouvre un fichier en mode lecture 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 gline du fichier texte=str(texte) :convertit la liste en une seule chaîne. count("mot"): compte le nombre d'occurrences de "mot" dans la chaîne. S.Loutfi EXERCICE 2 : nombre de lettres Vous allez ouvrir germinal.txt, compter pour chaque lettre le nombre d'occurrences. 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.txt: j'ai trouvé 786296 lettres Nombre de A = 72409 Nombre de B = 8162 …… J'ai effectué le travail en 6.867573113342618 secondes. S.Loutfi EXERCICE 3 : annuaire Ecrire un script python qui demande à l’utilisateur le Nom, Prénom, Téléphone, Code postal des adhérents d’une association et stocke ces informations dans un fichier (une information par ligne). Après chaque nouvelle entrée, demander si la saisie se poursuit ou non. Ecrire un script python qui demande à l’utilisateur le nom d’un adhérent afin d’afficher ses coordonnées. Si le nom n’existe pas un message est retourné à l’utilisateur. S.Loutfi Le module pickle: Lorsqu’on enregistre un fichier, les données sont stockées sous forme de chaines de caractères . Exemple : a= 27, b =12.96, c =[5, 4.83, "René"] Problème: Comment distinguer les données dans la chaîne de caractères résultante, lorsque nous effectuons la lecture du fichier ? C'est impossible ! Rien ne nous indique d'ailleurs qu'il y a là trois valeurs plutôt qu'une seule, ou 2, ou 4… S.Loutfi Le module pickle: Une des solutions à ce genre de problèmes, la meilleure, consiste à importer un module Python spécialisé : le module pickle . Pickle permet d'enregistrer les données avec conservation de leur type. Elles seront fidèlement restituées. On peut mémoriser ainsi des entiers, des réels, des chaînes de caractères, des listes, des dictionnaires …… S.Loutfi