Chapitre 4 : Les Enregistrements et les Fichiers en Python

 

Chapitre 4 : Les Enregistrements et les Fichiers en Python

Introduction aux Enregistrements

Définition et Utilité des Enregistrements

En informatique, un enregistrement est une structure de données qui regroupe plusieurs éléments de données sous un même nom. Chaque élément d'un enregistrement peut être de type différent. Les enregistrements sont particulièrement utiles pour modéliser des objets du monde réel de manière structurée.

Utilisation des Tuples et des Classes pour Modéliser des Enregistrements

  • Tuples : Un tuple est une séquence immuable d'éléments. En Python, les tuples peuvent être utilisés pour créer des enregistrements simples. Par exemple :

    python

    personne = ("John", "Doe", 30)

    Dans cet exemple, personne est un enregistrement contenant le prénom, le nom et l'âge d'une personne.

  • Classes : Pour des enregistrements plus complexes, on utilise généralement des classes. Les classes permettent de définir des objets avec des attributs et des méthodes. Par exemple :

    python

    class Personne: def __init__(self, prenom, nom, age): self.prenom = prenom self.nom = nom self.age = age

    Ici, la classe Personne modélise un enregistrement avec des attributs pour le prénom, le nom et l'âge.

Manipulation des Fichiers en Python

Types de Fichiers : Texte vs Binaire

  • Fichiers Texte : Contiennent des données sous forme de texte. Ils sont généralement plus faciles à lire et à écrire pour les humains. Les fichiers texte utilisent des encodages comme UTF-8 ou ASCII.
  • Fichiers Binaires : Contiennent des données sous forme binaire, ce qui les rend plus compacts mais moins lisibles pour les humains. Les fichiers binaires peuvent stocker des données plus complexes.

Ouverture et Fermeture des Fichiers

Pour ouvrir un fichier en Python, on utilise la fonction open(). Il est important de fermer les fichiers après leur utilisation pour libérer les ressources.

python

fichier = open("exemple.txt", "r") # Ouverture en mode lecture # Traitement du fichier fichier.close() # Fermeture du fichier

Modes d'Ouverture des Fichiers

  • "r" : Lecture seule
  • "w" : Écriture seule (création ou écrasement du fichier)
  • "a" : Ajout à la fin du fichier
  • "b" : Mode binaire (ajouter à l'un des modes précédents pour traiter des fichiers binaires, par exemple "rb" pour lecture binaire)

Opérations sur les Fichiers

Lecture et Écriture de Fichiers Texte

Pour lire un fichier texte ligne par ligne, on peut utiliser readline() ou readlines(). Pour écrire dans un fichier texte, on utilise write().

python

# Lecture d'un fichier texte with open("exemple.txt", "r") as fichier: contenu = fichier.readlines() # Écriture dans un fichier texte with open("exemple.txt", "w") as fichier: fichier.write("Bonjour, monde!\n")

Gestion des Fichiers Binaires : Pickle, Struct

  • Pickle : Permet de sérialiser (convertir en bytes) et désérialiser (convertir de bytes en objets Python) des objets Python.

    python

    import pickle # Sérialisation with open("donnees.pkl", "wb") as fichier: pickle.dump(objet, fichier) # Désérialisation with open("donnees.pkl", "rb") as fichier: objet = pickle.load(fichier)
  • Struct : Permet de manipuler des données binaires avec une structure définie.

    python

    import struct # Pack (convertir en bytes) donnees_binaires = struct.pack('I', 1234) # Unpack (convertir de bytes en valeur) valeur = struct.unpack('I', donnees_binaires)[0]

Traitement des Erreurs et Exceptions Liées aux Fichiers

Il est essentiel de gérer les erreurs lors de la manipulation des fichiers pour éviter les plantages de programmes. Utilisez les blocs try...except pour capturer et traiter les exceptions.

python

try: with open("exemple.txt", "r") as fichier: contenu = fichier.read() except FileNotFoundError: print("Le fichier n'existe pas.") except IOError: print("Erreur d'entrée/sortie.")

Parcours des Fichiers

Lecture Ligne par Ligne, par Blocs

Pour lire un fichier ligne par ligne :

python

with open("exemple.txt", "r") as fichier: for ligne in fichier: print(ligne.strip())

Pour lire un fichier par blocs :

python

with open("exemple.txt", "r") as fichier: contenu = fichier.read(1024) # Lire les premiers 1024 octets

Utilisation des Curseurs (Seek, Tell)

  • seek(offset, whence) : Déplace le curseur à une position spécifique dans le fichier.
  • tell() : Renvoie la position actuelle du curseur dans le fichier.
python

with open("exemple.txt", "r") as fichier: fichier.seek(10) # Déplacer le curseur à la position 10 print(fichier.tell()) # Afficher la position actuelle du curseur print(fichier.read(20)) # Lire 20 octets à partir de la position 10

Fichiers CSV et JSON

Manipulation des Fichiers CSV : Module CSV

Le module csv permet de lire et d'écrire des fichiers CSV facilement.

python

import csv # Lecture d'un fichier CSV with open("donnees.csv", "r") as fichier: lecteur = csv.reader(fichier) for ligne in lecteur: print(ligne) # Écriture dans un fichier CSV with open("donnees.csv", "w", newline='') as fichier: ecrivain = csv.writer(fichier) ecrivain.writerow(["Nom", "Age"]) ecrivain.writerow(["Alice", 30]) ecrivain.writerow(["Bob", 25])

Sérialisation et Désérialisation JSON : Module JSON

Le module json permet de convertir des objets Python en format JSON et vice versa.

python

import json # Sérialisation (conversion en JSON) obj = {"nom": "Alice", "age": 30} with open("donnees.json", "w") as fichier: json.dump(obj, fichier) # Désérialisation (conversion de JSON en objet Python) with open("donnees.json", "r") as fichier: obj = json.load(fichier) print(obj)

Persistance des Données

Sauvegarde et Restauration d'Objets Complexes

Pour sauvegarder des objets complexes, on peut utiliser la sérialisation avec pickle ou json, selon le format souhaité.

python

import pickle # Sauvegarde d'un objet complexe obj_complexe = {"nom": "Alice", "age": 30, "employe": True} with open("objet_complexe.pkl", "wb") as fichier: pickle.dump(obj_complexe, fichier) # Restauration d'un objet complexe with open("objet_complexe.pkl", "rb") as fichier: obj_complexe = pickle.load(fichier) print(obj_complexe)