SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
IN20 Informatique
Séance 6
Lecture et écriture
de fichiers
Sébastien Combéfis, Quentin Lurkin lundi 19 octobre 2015
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Rappels
Programmation défensive
Gestion d’erreur avec valeur de retour spéciale
Spécification de fonction (pré et postconditions)
Instruction assert
Utiliser et créer des exceptions
Capturer une erreur avec l’instruction try-except
Générer une erreur avec l’instruction raise
Définir une nouvelle exception
3
Objectifs
Lire et écrire des fichiers textes
Ouverture et fermeture d’un fichier
Fonctions de lecture et d’écriture
Encodage des caractères
Lire et écrire des fichiers binaires
Fonctions de lecture et d’écriture
Définition du format
4
Fichier texte
Fichier
Un fichier stocke des informations sur le disque dur
Il est créé, modifié, supprimé
Manipulation des fichiers grâce au système d’exploitation
L’interpréteur fait le relais avec Linux, Windows, Mac OS X...
Des informations sont associées à un fichier
Nom, taille, date de création, dernière date de modification...
6
Ouverture d’un fichier
Pour manipuler un fichier, il faut d’abord l’ouvrir
On utilise la fonction open, qui renvoie un identifiant de fichier
Deux erreurs possibles lors de l’ouverture
Fichier introuvable ou erreur d’ouverture
1 try:
2 file = open(’data.txt ’)
3 except FileNotFoundError :
4 print(’Le fichier est introuvable ’)
5 except IOError :
6 print("Erreur d’ouverture")
7
Mode d’ouverture (1)
Par défaut, fichier ouvert en lecture seule
Tout ce qu’on peut faire c’est donc lire le contenu du fichier
On peut spécifier le mode d’ouverture désiré
Avec le deuxième paramètre de la fonction open (mode)
1 try:
2 file = open(’data.txt ’, ’w’) # Ouverture en écriture
3 except FileNotFoundError :
4 print(’Le fichier est introuvable ’)
5 except IOError :
6 print("Erreur d’ouverture")
8
Mode d’ouverture (2)
Mode d’ouverture définit avec des caractères
Caractère Description
r Lecture (par défaut)
w Écriture (avec remise à zéro)
x Création exclusive (erreur si fichier déjà existant)
a Écriture (avec ajout à la fin)
b Mode binaire
t Mode texte (par défaut)
1 try:
2 file = open(’data.txt ’, ’rt’) # Mode par défaut
3 except FileNotFoundError :
4 print(’Le fichier est introuvable ’)
5 except IOError :
6 print("Erreur d’ouverture")
9
Fermeture d’un fichier
Une fois les opérations finies, il faut fermer le fichier
On utilise la fonction close avec l’identifiant de fichier
Libération des ressources et sauvegarde sur disque
Le système d’exploitation limite le nombre de fichiers ouverts
1 try:
2 file = open(’data.txt ’)
3 file.close () # Fermeture du fichier
4 except FileNotFoundError :
5 print(’Le fichier est introuvable ’)
6 except IOError :
7 print("Erreur d’ouverture")
10
Lecture
Lecture intégrale du fichier comme une chaine de caractères
On utilise la fonction read avec l’identifiant de fichier
La lecture peut échouer et provoquer une exception IOError
Par exemple si le disque est déconnecté pendant la lecture
1 try:
2 file = open(’data.txt ’)
3 print(file.read ())
4 file.close ()
5 except FileNotFoundError :
6 print(’Le fichier est introuvable ’)
7 except IOError :
8 print("Erreur d’entrée/sortie")
11
Instruction finally (1)
En cas d’erreur, le fichier pourrait ne pas être fermé
Car l’exécution du code saute directement dans l’except
Instruction finally exécutée dans tous les cas
Après la fin du bloc try ou après un except éventuel
1 try:
2 file = open(’data.txt ’)
3 print(file.read ())
4 except FileNotFoundError :
5 print(’Le fichier est introuvable ’)
6 except IOError :
7 print("Erreur d’ouverture")
8 finally :
9 file.close ()
12
Instruction finally (2)
Bug dans le code précédent si le fichier n’a pas su être ouvert
La variable file ne sera pas initialisée et close disponible
On utilise une instruction try/finally additionnelle
1 try:
2 file = open(’data.txt ’)
3 try:
4 print(file.read ())
5 finally :
6 file.close ()
7 except FileNotFoundError :
8 print(’Le fichier est introuvable ’)
9 except IOError :
10 print("Erreur d’entrée/sortie")
13
Instruction with
Instruction with pour fermeture propre des ressources
L’appel à close sera fait automatiquement
Il faut garder le try/except pour les IOError
1 try:
2 with open(’data.txt ’) as file:
3 print(file.read ())
4 except FileNotFoundError :
5 print(’Le fichier est introuvable ’)
6 except IOError :
7 print("Erreur d’entrée/sortie")
Facebook:mlt@ecam.be:melo :8dj ,Sj0m1
Skype:mar@ecam.be:cedou:arduino
Facebook:fle@ecam.be:fingerfood:b8ur ,g2er
14
Écriture (1)
Écriture en ajoutant des chaines de caractères au fichier
On utilise la fonction write avec l’identifiant de fichier
L’écriture peut échouer et provoquer une exception IOError
Par exemple si l’espace disque devient plein pendant l’écriture
1 with open(’out.txt ’, ’w’) as file:
2 file.write(’Table de 10n’)
3 for i in range (10):
4 file.write(’{} x 10 = {}n’.format(i, i * 10))
15
Écriture (2)
16
Copie d’un fichier
Copie en faisant une lecture puis écriture du contenu lu
Deux instruction with imbriquées
Si le fichier destination existe déjà, il est effacé
Il faut utiliser le mode x au lieu de w pour empêcher cela
1 with open(’data.txt ’, ’r’) as src , open(’copy.txt ’, ’w’) as dest:
2 dest.write(src.read ())
17
Lecture ligne par ligne (1)
Utilisation d’un itérateur sur le fichier ouvert, avec for
Parcours ligne par ligne, avec le retour de ligne inclus
Fonction rstrip pour retirer les caractères blancs de droite
1 with open(’data.txt ’) as file:
2 for line in file:
3 cleaned = line.rstrip ()
4 tokens = cleaned.split(’:’)
5 print(’Compte {} de {} (mode de passe : {})’.format(tokens
[0], tokens [2], tokens [3]))
Compte Facebook de melo (mode de passe : 8dj ,Sj0m1)
Compte Skype de cedou (mode de passe : arduino)
Compte Facebook de fingerfood (mode de passe : b8ur ,g2er)
18
Lecture ligne par ligne (2)
La fonction readlines lis l’intégralité des lignes en une traite
La fonction renvoie une liste de chaines de caractères
On peut supprimer la variable cleaned inutile
En enchainant directement les appels à rstrip et split
1 with open(’data.txt ’) as file:
2 content = file.readlines ()
3
4 for line in content:
5 tokens = line.rstrip ().split(’:’)
6 print(’Compte {} de {} (mode de passe : {})’.format(tokens [0],
tokens [2], tokens [3]))
19
Lecture ligne par ligne (3)
Amélioration du code avec une fonction de formatage
On définit une fonction qui formate une ligne
On définit une liste par compréhension et on joint ses éléments
Jointure des éléments d’une liste réalisée avec fonction join
1 def format(line):
2 tokens = line.rstrip ().split(’:’)
3 return ’Compte {} de {} (mode de passe : {})’.format(tokens [0],
tokens [2], tokens [3])
4
5 with open(’data.txt ’) as file:
6 content = file.readlines ()
7 print(’n’.join ([ format(line) for line in content ]))
20
Exception
L’erreur principale d’entrée/sortie est IOError
On peut se limiter à capturer cette unique erreur
Erreur spécialisée selon le type précis
FileNotFoundError, si le fichier n’est pas trouvé
FileExistsError, si le fichier existe déjà
PermissionError, si l’utilisateur n’a pas les droits d’accès
IsADirectoryError, si le fichier est en fait un dossier
21
Encodage (1)
Les caractères sont stockés au format binaire dans l’ordinateur
Table de correspondance associant un entier à chaque caractère
La table de caractères ASCII (iso-646) contient 128 caractères
Table suffisante pour des textes en anglais
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL SOH STH ETH EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1 DLE DC1 CD2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2 spc ! " # $ % & ’ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [  ] ˆ _
6 ‘ a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ∼ DEL
22
Encodage (2)
La fonction ord donne le code d’un caractère
Sous forme d’un nombre entier
La fonction chr donne le caractère correspondant à un code
Sous forme d’une chaine de caractères
1 print(chr (65)) # Affiche A
2
3 print(ord(’z’)) # Affiche 90
23
Unicode et UTF-8
Unicode (ISO 10646) est un standard d’échange de texte
Associe à tout caractère un nom et un identifiant numérique
UTF-8 est un encodage pour les caractères Unicode
Python travaille par défaut avec l’encodage UTF-8
Parcourir les caractères Unicode en ligne : http://unicode-table.com
24
Choisir l’encodage
On spécifie l’encodage des fichiers avec le paramètre encoding
Traceback (most recent call last):
File "program.py", line 6, in <module >
print(file.read ())
File "/ Library/Frameworks/Python.framework/Versions /3.4/ lib/
python3 .4/ encodings/ascii.py", line 26, in decode
return codecs. ascii_decode (input , self.errors)[0]
UnicodeDecodeError : ’ascii ’ codec can ’t decode byte 0xf0 in
position 11: ordinal not in range (128)
25
Bonus (1)
On peut ajouter une image dans une interface graphique
On crée une image avec PhotoImage et on la met dans un label
Seuls les formats GIF, PPM et PGM sont acceptés
1 from tkinter import *
2
3 window = Tk()
4 window.title(’THIS IS A SECRET!’)
5
6 photo = PhotoImage(file="secret.ppm")
7 Label(window , image=photo).pack ()
8
9 window.mainloop ()
26
Bonus (2)
27
Fichier binaire
Fichier binaire vs texte
Deux types de fichiers
Fichier texte : séquence de caractères en UTF-8
Fichier binaire : séquence d’octets (huit bits)
Fichier binaire plus compact et rapide à lire/écrire
Connaitre le format d’un fichier binaire pour le manipuler
L’organisation des données dans le fichier
29
Écriture (1)
Écrire dans un fichier binaire avec le module pickle
La fonction dump écrit un objet dans le fichier
Les objets sont écrits successivement dans le fichier
Erreur de type PicklingError si l’objet ne sait pas être converti
1 import pickle
2
3 name = " Temperatures (2015)"
4 data = [12, -9, 7, 112, 99]
5 try:
6 with open(’data.bin ’, ’wb’) as file:
7 pickle.dump(name , file , pickle. HIGHEST_PROTOCOL )
8 pickle.dump(data , file , pickle. HIGHEST_PROTOCOL )
9 except pickle. PicklingError :
10 print("Erreur d’écriture")
30
Écriture (2)
Un fichier binaire n’est pas lisible directement
Il faut pouvoir interpréter son contenu
31
Lecture
Lire dans un fichier binaire avec le module pickle
La fonction load lit un objet depuis le fichier
Les objets sont lus successivement dans le fichier
Erreur de type UnpicklingError si l’objet ne sait pas être lu
1 import pickle
2
3 try:
4 with open(’data.bin ’, ’rb’) as file:
5 name = pickle.load(file)
6 data = pickle.load(file)
7 print(name , data , sep=’n’)
8 except pickle. UnpicklingError :
9 print("Erreur de lecture")
32
Module struct
Le module struct permet de convertir des données en bytes
Manipulation de données binaires brutes
Deux fonctions à utiliser
pack convertit des données en un bytes
unpack convertit un bytes en une donnée
Caractère Description
h Nombre entier signé (court)
H Nombre entier non signé (court)
i Nombre entier signé
I Nombre entier non signé
f Nombre flottant
s Chaine de caractères
? Booléen
33
Encodage/décodage de chaines de caractères
Encodage d’un str vers un bytes avec encode
On spécifie l’encodage désiré en paramètre
Décodage d’un bytes vers un str avec decode
1 s = "Hello"
2
3 data = s.encode(’utf -8’)
4 print(type(data))
5 print(data)
6
7 print(data.decode(’utf -8’))
<class ’bytes ’>
b’Hello ’
Hello
34
Écriture avec pack
Écritures successives dans le fichier avec struct.pack
On définit le format de la donnée à écrire, et la donnée
19 T e ... 5 ) 5 12 ... 99
name data
1 import struct
2
3 name = " Temperatures (2015)"
4 data = [12, -9, 7, 112, 99]
5
6 with open(’data2.bin ’, ’wb’) as file:
7 n = len(name)
8 file.write(struct.pack(’H’, n))
9 file.write(struct.pack(’{}s’.format(n), name.encode(’utf -8’)))
10 file.write(struct.pack(’H’, len(data)))
11 for elem in data:
12 file.write(struct.pack(’h’, elem))
35
Lecture avec unpack
Lectures successives dans le fichier avec struct.unpack
On définit le format de la donnée à lire, et l’objet bytes
1 import struct
2
3 with open(’data2.bin ’, ’rb’) as file:
4 n = struct.unpack(’H’, file.read (2))[0]
5 name = struct.unpack(’{}s’.format(n), file.read(n))[0]. decode(’
utf -8’)
6 n = struct.unpack(’H’, file.read (2))[0]
7 data = [struct.unpack(’H’, file.read (2))[0] for i in range(n)]
8 print(name , data , sep=’n’)
36
pickle ou struct
pickle plus facile à utiliser et plus automatique
Ne nécessite pas de définir le format de stockage des données
struct plus flexible et plus compact
63 octets pour data.bin contre 33 octets pour data2.bin
37
Création d’un fichier compressé
Utilisation du module gzip pour gérer des fichiers compressés
Propose une fonction open pour ouvrir un fichier compressé
On écrit les données compressées avec la fonction write
Chaine de caractère transformée en bytes avec encode
1 import gzip
2
3 with gzip.open(’data.txt.gz’, mode=’wb’) as file:
4 file.write(’Hello Valerian! Ready for a beer?’.encode(’utf -8’))
38
Crédits
https://www.flickr.com/photos/jasoneppink/2081701562
https://www.flickr.com/photos/rakka/123380632
39

Contenu connexe

Tendances

Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielleECAM Brussels Engineering School
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonMariem ZAOUALI
 
Cours python
Cours pythonCours python
Cours pythonsalmazen
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CAbdelouahed Abdou
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfRedaBelattar
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 

Tendances (20)

Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Cours python
Cours pythonCours python
Cours python
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 

En vedette

Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetECAM Brussels Engineering School
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileECAM Brussels Engineering School
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresECAM Brussels Engineering School
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...ECAM Brussels Engineering School
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséECAM Brussels Engineering School
 
la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...najwa sabouk
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationECAM Brussels Engineering School
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...ECAM Brussels Engineering School
 

En vedette (20)

Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 

Similaire à Python avancé : Lecture et écriture de fichiers

Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfMadaniAhlem2
 
Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Abib Faye
 
Les nouveautés de java 7 et les promesses
Les nouveautés de java 7  et les promessesLes nouveautés de java 7  et les promesses
Les nouveautés de java 7 et les promessesEric Toguem
 
Les entrées sorties
Les entrées sortiesLes entrées sorties
Les entrées sortiesJihed Kaouech
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2MEZied
 
Les_fichiers_sousPython..TXT et JSON et csv
Les_fichiers_sousPython..TXT et JSON et csvLes_fichiers_sousPython..TXT et JSON et csv
Les_fichiers_sousPython..TXT et JSON et csvnadiamfr1
 
Exploitation des moyens numériques mix
Exploitation des moyens numériques mixExploitation des moyens numériques mix
Exploitation des moyens numériques mixkamali az
 
Cours d'informatique du prof Heimer
Cours d'informatique du prof HeimerCours d'informatique du prof Heimer
Cours d'informatique du prof Heimerrochats
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxbpmana
 
Manipulation_des_fichiers_en_C.ppsx
Manipulation_des_fichiers_en_C.ppsxManipulation_des_fichiers_en_C.ppsx
Manipulation_des_fichiers_en_C.ppsxYallaHabibi5
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19Amel Morchdi
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sortiesyazidds2
 

Similaire à Python avancé : Lecture et écriture de fichiers (20)

Formation python
Formation pythonFormation python
Formation python
 
Theme 8
Theme 8Theme 8
Theme 8
 
Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdf
 
Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Les nouveautés de java 7 et les promesses
Les nouveautés de java 7  et les promessesLes nouveautés de java 7  et les promesses
Les nouveautés de java 7 et les promesses
 
Les entrées sorties
Les entrées sortiesLes entrées sorties
Les entrées sorties
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2ME
 
Les_fichiers_sousPython..TXT et JSON et csv
Les_fichiers_sousPython..TXT et JSON et csvLes_fichiers_sousPython..TXT et JSON et csv
Les_fichiers_sousPython..TXT et JSON et csv
 
Exploitation des moyens numériques mix
Exploitation des moyens numériques mixExploitation des moyens numériques mix
Exploitation des moyens numériques mix
 
Cours algo1 (1)
Cours algo1 (1)Cours algo1 (1)
Cours algo1 (1)
 
Cours algo1
Cours algo1Cours algo1
Cours algo1
 
Cours d'informatique du prof Heimer
Cours d'informatique du prof HeimerCours d'informatique du prof Heimer
Cours d'informatique du prof Heimer
 
Go
GoGo
Go
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptx
 
Manipulation_des_fichiers_en_C.ppsx
Manipulation_des_fichiers_en_C.ppsxManipulation_des_fichiers_en_C.ppsx
Manipulation_des_fichiers_en_C.ppsx
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sorties
 
Introduction informatique
Introduction informatiqueIntroduction informatique
Introduction informatique
 

Plus de ECAM Brussels Engineering School

Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleECAM Brussels Engineering School
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (13)

Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 

Python avancé : Lecture et écriture de fichiers

  • 1. IN20 Informatique Séance 6 Lecture et écriture de fichiers Sébastien Combéfis, Quentin Lurkin lundi 19 octobre 2015
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Rappels Programmation défensive Gestion d’erreur avec valeur de retour spéciale Spécification de fonction (pré et postconditions) Instruction assert Utiliser et créer des exceptions Capturer une erreur avec l’instruction try-except Générer une erreur avec l’instruction raise Définir une nouvelle exception 3
  • 4. Objectifs Lire et écrire des fichiers textes Ouverture et fermeture d’un fichier Fonctions de lecture et d’écriture Encodage des caractères Lire et écrire des fichiers binaires Fonctions de lecture et d’écriture Définition du format 4
  • 6. Fichier Un fichier stocke des informations sur le disque dur Il est créé, modifié, supprimé Manipulation des fichiers grâce au système d’exploitation L’interpréteur fait le relais avec Linux, Windows, Mac OS X... Des informations sont associées à un fichier Nom, taille, date de création, dernière date de modification... 6
  • 7. Ouverture d’un fichier Pour manipuler un fichier, il faut d’abord l’ouvrir On utilise la fonction open, qui renvoie un identifiant de fichier Deux erreurs possibles lors de l’ouverture Fichier introuvable ou erreur d’ouverture 1 try: 2 file = open(’data.txt ’) 3 except FileNotFoundError : 4 print(’Le fichier est introuvable ’) 5 except IOError : 6 print("Erreur d’ouverture") 7
  • 8. Mode d’ouverture (1) Par défaut, fichier ouvert en lecture seule Tout ce qu’on peut faire c’est donc lire le contenu du fichier On peut spécifier le mode d’ouverture désiré Avec le deuxième paramètre de la fonction open (mode) 1 try: 2 file = open(’data.txt ’, ’w’) # Ouverture en écriture 3 except FileNotFoundError : 4 print(’Le fichier est introuvable ’) 5 except IOError : 6 print("Erreur d’ouverture") 8
  • 9. Mode d’ouverture (2) Mode d’ouverture définit avec des caractères Caractère Description r Lecture (par défaut) w Écriture (avec remise à zéro) x Création exclusive (erreur si fichier déjà existant) a Écriture (avec ajout à la fin) b Mode binaire t Mode texte (par défaut) 1 try: 2 file = open(’data.txt ’, ’rt’) # Mode par défaut 3 except FileNotFoundError : 4 print(’Le fichier est introuvable ’) 5 except IOError : 6 print("Erreur d’ouverture") 9
  • 10. Fermeture d’un fichier Une fois les opérations finies, il faut fermer le fichier On utilise la fonction close avec l’identifiant de fichier Libération des ressources et sauvegarde sur disque Le système d’exploitation limite le nombre de fichiers ouverts 1 try: 2 file = open(’data.txt ’) 3 file.close () # Fermeture du fichier 4 except FileNotFoundError : 5 print(’Le fichier est introuvable ’) 6 except IOError : 7 print("Erreur d’ouverture") 10
  • 11. Lecture Lecture intégrale du fichier comme une chaine de caractères On utilise la fonction read avec l’identifiant de fichier La lecture peut échouer et provoquer une exception IOError Par exemple si le disque est déconnecté pendant la lecture 1 try: 2 file = open(’data.txt ’) 3 print(file.read ()) 4 file.close () 5 except FileNotFoundError : 6 print(’Le fichier est introuvable ’) 7 except IOError : 8 print("Erreur d’entrée/sortie") 11
  • 12. Instruction finally (1) En cas d’erreur, le fichier pourrait ne pas être fermé Car l’exécution du code saute directement dans l’except Instruction finally exécutée dans tous les cas Après la fin du bloc try ou après un except éventuel 1 try: 2 file = open(’data.txt ’) 3 print(file.read ()) 4 except FileNotFoundError : 5 print(’Le fichier est introuvable ’) 6 except IOError : 7 print("Erreur d’ouverture") 8 finally : 9 file.close () 12
  • 13. Instruction finally (2) Bug dans le code précédent si le fichier n’a pas su être ouvert La variable file ne sera pas initialisée et close disponible On utilise une instruction try/finally additionnelle 1 try: 2 file = open(’data.txt ’) 3 try: 4 print(file.read ()) 5 finally : 6 file.close () 7 except FileNotFoundError : 8 print(’Le fichier est introuvable ’) 9 except IOError : 10 print("Erreur d’entrée/sortie") 13
  • 14. Instruction with Instruction with pour fermeture propre des ressources L’appel à close sera fait automatiquement Il faut garder le try/except pour les IOError 1 try: 2 with open(’data.txt ’) as file: 3 print(file.read ()) 4 except FileNotFoundError : 5 print(’Le fichier est introuvable ’) 6 except IOError : 7 print("Erreur d’entrée/sortie") Facebook:mlt@ecam.be:melo :8dj ,Sj0m1 Skype:mar@ecam.be:cedou:arduino Facebook:fle@ecam.be:fingerfood:b8ur ,g2er 14
  • 15. Écriture (1) Écriture en ajoutant des chaines de caractères au fichier On utilise la fonction write avec l’identifiant de fichier L’écriture peut échouer et provoquer une exception IOError Par exemple si l’espace disque devient plein pendant l’écriture 1 with open(’out.txt ’, ’w’) as file: 2 file.write(’Table de 10n’) 3 for i in range (10): 4 file.write(’{} x 10 = {}n’.format(i, i * 10)) 15
  • 17. Copie d’un fichier Copie en faisant une lecture puis écriture du contenu lu Deux instruction with imbriquées Si le fichier destination existe déjà, il est effacé Il faut utiliser le mode x au lieu de w pour empêcher cela 1 with open(’data.txt ’, ’r’) as src , open(’copy.txt ’, ’w’) as dest: 2 dest.write(src.read ()) 17
  • 18. Lecture ligne par ligne (1) Utilisation d’un itérateur sur le fichier ouvert, avec for Parcours ligne par ligne, avec le retour de ligne inclus Fonction rstrip pour retirer les caractères blancs de droite 1 with open(’data.txt ’) as file: 2 for line in file: 3 cleaned = line.rstrip () 4 tokens = cleaned.split(’:’) 5 print(’Compte {} de {} (mode de passe : {})’.format(tokens [0], tokens [2], tokens [3])) Compte Facebook de melo (mode de passe : 8dj ,Sj0m1) Compte Skype de cedou (mode de passe : arduino) Compte Facebook de fingerfood (mode de passe : b8ur ,g2er) 18
  • 19. Lecture ligne par ligne (2) La fonction readlines lis l’intégralité des lignes en une traite La fonction renvoie une liste de chaines de caractères On peut supprimer la variable cleaned inutile En enchainant directement les appels à rstrip et split 1 with open(’data.txt ’) as file: 2 content = file.readlines () 3 4 for line in content: 5 tokens = line.rstrip ().split(’:’) 6 print(’Compte {} de {} (mode de passe : {})’.format(tokens [0], tokens [2], tokens [3])) 19
  • 20. Lecture ligne par ligne (3) Amélioration du code avec une fonction de formatage On définit une fonction qui formate une ligne On définit une liste par compréhension et on joint ses éléments Jointure des éléments d’une liste réalisée avec fonction join 1 def format(line): 2 tokens = line.rstrip ().split(’:’) 3 return ’Compte {} de {} (mode de passe : {})’.format(tokens [0], tokens [2], tokens [3]) 4 5 with open(’data.txt ’) as file: 6 content = file.readlines () 7 print(’n’.join ([ format(line) for line in content ])) 20
  • 21. Exception L’erreur principale d’entrée/sortie est IOError On peut se limiter à capturer cette unique erreur Erreur spécialisée selon le type précis FileNotFoundError, si le fichier n’est pas trouvé FileExistsError, si le fichier existe déjà PermissionError, si l’utilisateur n’a pas les droits d’accès IsADirectoryError, si le fichier est en fait un dossier 21
  • 22. Encodage (1) Les caractères sont stockés au format binaire dans l’ordinateur Table de correspondance associant un entier à chaque caractère La table de caractères ASCII (iso-646) contient 128 caractères Table suffisante pour des textes en anglais 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 NUL SOH STH ETH EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 CD2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2 spc ! " # $ % & ’ ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ ] ˆ _ 6 ‘ a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ∼ DEL 22
  • 23. Encodage (2) La fonction ord donne le code d’un caractère Sous forme d’un nombre entier La fonction chr donne le caractère correspondant à un code Sous forme d’une chaine de caractères 1 print(chr (65)) # Affiche A 2 3 print(ord(’z’)) # Affiche 90 23
  • 24. Unicode et UTF-8 Unicode (ISO 10646) est un standard d’échange de texte Associe à tout caractère un nom et un identifiant numérique UTF-8 est un encodage pour les caractères Unicode Python travaille par défaut avec l’encodage UTF-8 Parcourir les caractères Unicode en ligne : http://unicode-table.com 24
  • 25. Choisir l’encodage On spécifie l’encodage des fichiers avec le paramètre encoding Traceback (most recent call last): File "program.py", line 6, in <module > print(file.read ()) File "/ Library/Frameworks/Python.framework/Versions /3.4/ lib/ python3 .4/ encodings/ascii.py", line 26, in decode return codecs. ascii_decode (input , self.errors)[0] UnicodeDecodeError : ’ascii ’ codec can ’t decode byte 0xf0 in position 11: ordinal not in range (128) 25
  • 26. Bonus (1) On peut ajouter une image dans une interface graphique On crée une image avec PhotoImage et on la met dans un label Seuls les formats GIF, PPM et PGM sont acceptés 1 from tkinter import * 2 3 window = Tk() 4 window.title(’THIS IS A SECRET!’) 5 6 photo = PhotoImage(file="secret.ppm") 7 Label(window , image=photo).pack () 8 9 window.mainloop () 26
  • 29. Fichier binaire vs texte Deux types de fichiers Fichier texte : séquence de caractères en UTF-8 Fichier binaire : séquence d’octets (huit bits) Fichier binaire plus compact et rapide à lire/écrire Connaitre le format d’un fichier binaire pour le manipuler L’organisation des données dans le fichier 29
  • 30. Écriture (1) Écrire dans un fichier binaire avec le module pickle La fonction dump écrit un objet dans le fichier Les objets sont écrits successivement dans le fichier Erreur de type PicklingError si l’objet ne sait pas être converti 1 import pickle 2 3 name = " Temperatures (2015)" 4 data = [12, -9, 7, 112, 99] 5 try: 6 with open(’data.bin ’, ’wb’) as file: 7 pickle.dump(name , file , pickle. HIGHEST_PROTOCOL ) 8 pickle.dump(data , file , pickle. HIGHEST_PROTOCOL ) 9 except pickle. PicklingError : 10 print("Erreur d’écriture") 30
  • 31. Écriture (2) Un fichier binaire n’est pas lisible directement Il faut pouvoir interpréter son contenu 31
  • 32. Lecture Lire dans un fichier binaire avec le module pickle La fonction load lit un objet depuis le fichier Les objets sont lus successivement dans le fichier Erreur de type UnpicklingError si l’objet ne sait pas être lu 1 import pickle 2 3 try: 4 with open(’data.bin ’, ’rb’) as file: 5 name = pickle.load(file) 6 data = pickle.load(file) 7 print(name , data , sep=’n’) 8 except pickle. UnpicklingError : 9 print("Erreur de lecture") 32
  • 33. Module struct Le module struct permet de convertir des données en bytes Manipulation de données binaires brutes Deux fonctions à utiliser pack convertit des données en un bytes unpack convertit un bytes en une donnée Caractère Description h Nombre entier signé (court) H Nombre entier non signé (court) i Nombre entier signé I Nombre entier non signé f Nombre flottant s Chaine de caractères ? Booléen 33
  • 34. Encodage/décodage de chaines de caractères Encodage d’un str vers un bytes avec encode On spécifie l’encodage désiré en paramètre Décodage d’un bytes vers un str avec decode 1 s = "Hello" 2 3 data = s.encode(’utf -8’) 4 print(type(data)) 5 print(data) 6 7 print(data.decode(’utf -8’)) <class ’bytes ’> b’Hello ’ Hello 34
  • 35. Écriture avec pack Écritures successives dans le fichier avec struct.pack On définit le format de la donnée à écrire, et la donnée 19 T e ... 5 ) 5 12 ... 99 name data 1 import struct 2 3 name = " Temperatures (2015)" 4 data = [12, -9, 7, 112, 99] 5 6 with open(’data2.bin ’, ’wb’) as file: 7 n = len(name) 8 file.write(struct.pack(’H’, n)) 9 file.write(struct.pack(’{}s’.format(n), name.encode(’utf -8’))) 10 file.write(struct.pack(’H’, len(data))) 11 for elem in data: 12 file.write(struct.pack(’h’, elem)) 35
  • 36. Lecture avec unpack Lectures successives dans le fichier avec struct.unpack On définit le format de la donnée à lire, et l’objet bytes 1 import struct 2 3 with open(’data2.bin ’, ’rb’) as file: 4 n = struct.unpack(’H’, file.read (2))[0] 5 name = struct.unpack(’{}s’.format(n), file.read(n))[0]. decode(’ utf -8’) 6 n = struct.unpack(’H’, file.read (2))[0] 7 data = [struct.unpack(’H’, file.read (2))[0] for i in range(n)] 8 print(name , data , sep=’n’) 36
  • 37. pickle ou struct pickle plus facile à utiliser et plus automatique Ne nécessite pas de définir le format de stockage des données struct plus flexible et plus compact 63 octets pour data.bin contre 33 octets pour data2.bin 37
  • 38. Création d’un fichier compressé Utilisation du module gzip pour gérer des fichiers compressés Propose une fonction open pour ouvrir un fichier compressé On écrit les données compressées avec la fonction write Chaine de caractère transformée en bytes avec encode 1 import gzip 2 3 with gzip.open(’data.txt.gz’, mode=’wb’) as file: 4 file.write(’Hello Valerian! Ready for a beer?’.encode(’utf -8’)) 38