Académique Documents
Professionnel Documents
Culture Documents
INF2 – P23
1 - Un fichier ?
1.1 – POUR QUOI FAIRE ?
1.2 – TYPES DE FICHIERS
EXEMPLE
Je dois calculer la moyenne des étudiants à l’examen le lundi et le mercredi refaire le calcul. Imaginez
un instant s’il fallait entrer toutes les notes à la main à chaque exécution du programme !
Fichier binaire
Fichier texte
Ouverture
SYNTAXE
Mode Description
‘r’ Lecture seule (par défaut), exception levée s’il n’existe pas
Ouverture ‘w’ Écriture seule, fichier écrasé s’il existe déjà
‘x’ Création puis écriture, exception levée si le fichier existe déjà
‘a’ Ajout, écrit à la fin du fichier s’il existe, le créé sinon
Fermeture Les modes sont combinables ! ‘w+b’ ouvre un fichier en l’écrasant, permet de lire et écrire
dedans et le tout en binaire !
fichier_a_ouvrir.txt
Ouverture
Manipulation
Fermeture
EXEMPLE
Manipulation
Fermeture
Manipulation BONUS
• seek(offset, whence=SEEK_SET) déplace le curseur dans le fichier de
offset caractères relativement à la position donnée par whence.
fichier = open("fichier_a_ouvrir.txt")
for ligne in fichier: Utilisation de l’itérateur
Manipulation # faire des choses
fichier = open("fichier_a_ouvrir.txt")
for ligne in fichier.readlines():
Fermeture # Bien réfléchir, est-ce que j'ai besoin
# de toutes les lignes dans une liste ?
Manipulation
SYNTAXE
TextIOWrapper.writelines(self, lines)
Fermeture
Liste de chaînes de caractères à écrire
Manipulation
ATTENTION
Le mode ‘w’ écrase le fichier s’il existe
Fermeture
SYNTAXE
Ouverture TextIOWrapper.close(self)
Manipulation
EXEMPLE
fichier = open("fichier_a_ouvrir.txt", "w")
fichier.write("INF2 ça réveille\n")
# ...
Fermeture fichier.close()
EXEMPLE
with open("fichier_a_ouvrir.txt", "r+") as fichier:
Ouverture contenu = fichier.read()
fichier.write("ecriture dans mon fichier...")
print(f"dans le bloc with, closed = {fichier.closed}")
print(f"En dehors du bloc with, closed = {fichier.closed}")
Manipulation
SORTIE
dans le bloc with, closed = False
Fermeture En dehors du bloc with, closed = True
ATTENTION
La standardisation du format csv (RFC4180) a été tardive donc il existe des différences entre les fichiers CSV en
fonction de l’application source (ex. Microsoft utilise le ‘;’ en séparateur).
3 - SYNTAXE
csv.reader(file, dialect=‘excel’, **params)
SORTIE
{'Nom': 'ADNET NATANAËL', 'median': '7.5', 'TP': '16.6', 'final': '10.7'}
{'Nom': 'ANGE HUBERT', 'median': '5.25', 'TP': '11.4', 'final': '17.0'}
{'Nom': 'ARDOUIN ANNE-MARIE', 'median': '12.9', 'TP': '20.0', 'final': '16.0'}
{'Nom': 'ARDOUIN AXELLE', 'median': '13.2', 'TP': '6.8', 'final': '15.1'}
{'Nom': 'BARRAULT MATTHIEU', 'median': '6.75', 'TP': '12.5', 'final': '5.9'}
{'Nom': 'BEAULNE JEAN-PASCAL', 'median': '14.45', 'TP': '18.8', 'final': '10.4'}
{'Nom': 'BEAUVILLIERS FRANCK', 'median': '14.45', 'TP': '20.0', 'final': '9.3'}
{'Nom': 'BECHARD WILLIAM', 'median': '11.7', 'TP': '20.0', 'final': '10.9'}
{'Nom': 'BÉLIVEAU BAPTISTE', 'median': '14.65', 'TP': '8.7', 'final': '2.6'}
3 - SYNTAXE
csv.writer(file, dialect=‘excel’, **params)
EXEMPLE
data = [
etudiants.csv
["Nom", "Prénom", "Niveau"],
["Michel", "Adeline", "TC03"],
Nom,Prénom,Niveau
["Jumel", "Loïc", "GX92"]
] Michel,Adeline,TC03
with open("etudiants.csv", "w") as file: Jumel,Loïc,GX92
writer = csv.writer(file, lineterminator="\n", delimiter=";")
writer.writerows(data)
INFO
Il est aussi possible d’écrire ligne par ligne en utilisant writerow
INFO
DictWriter permet d’écrire les données en se basant sur des dictionnaires en entrée.
◦ Des objets uniques pour manipuler les données peu importe leur
format d’origine Écriture des données
◦ Series (1D) pandas.to_*
◦ DataFrame (2D)
BONNE PRATIQUE
L’import de la librairie pandas se fait avec un alias !
import pandas as pd
EXEMPLE
• print(DataFrame) Affiche les 5 premières et 5 dernières lignes (permet de vérifier les données)
ENCORE PLUS !
Pandas permet un grand nombre d’autres manipulations sur les DataFrames (agrégations,
timeseries, tri, jointures, statistiques, graphiques avec matplotlib…)
https://pandas.pydata.org/docs/
Extraire des lignes avec une Sélectionner des valeurs avec une condition et un
condition (DataFrame) : nom de colonne :
minors = df[df["age"] < 18] df.loc[df['age'] > 20, 'gentil'] = "Non"
◦ Binaire
Objet Python
Pickle est un module qui permet d’effectuer les opérations de
sérialisation et de désérialisation sur les objets Python.
pickle.dump pickle.dumps
SYNTAXE
pickle.dump(obj, file)
EXCEPTION
Si une erreur est rencontrée lors de la sérialisation/désérialisation une exception de type
pickle.PiclingError/pickle.UnpicklingError sera levée
Il est possible de définir à la main le résultat de la (dé)sérialisation par les méthodes d’instance
__getstate__ et __setstate__.
RAPPEL
Sérialiser ≠ Écrire dans un fichier ≠ Archiver
On peut sérialiser pour transmettre des données sur un canal réseau par exemple.
Python propose de gérer les fichiers et arborescence d’une manière C:\ (ou /)
unifiée avec le module pathlib et sa classe Path :
mon_dossier
• Opérateur / pour créer un chemin avec le bon séparateur en fonction de
l’OS exemple.py
• \ pour les systèmes Windows p = Path("C:\\")
• / pour les systèmes Unix p = p / "Users" / "toto" → C:\Users\toto
fichier_a_ouvrir.txt