{"id":5837,"date":"2024-08-29T07:36:11","date_gmt":"2024-08-29T07:36:11","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/enregistrer-des-objets-dans-un-fichier-binaire-python\/"},"modified":"2024-08-29T07:36:15","modified_gmt":"2024-08-29T07:36:15","slug":"enregistrer-des-objets-dans-un-fichier-binaire-python","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/enregistrer-des-objets-dans-un-fichier-binaire-python\/","title":{"rendered":"8.3 Enregistrer des Objets dans un Fichier Binaire Python"},"content":{"rendered":"\u00ab\u00a0`html\n\n<p><strong>Enregistrer des Objets dans un Fichier Binaire en Python<\/strong> est une comp\u00e9tence cl\u00e9 pour tout d\u00e9veloppeur souhaitant manipuler et conserver des donn\u00e9es de mani\u00e8re efficace. Comprendre comment s\u00e9rialiser et d\u00e9s\u00e9rialiser des objets en utilisant les biblioth\u00e8ques Python peut consid\u00e9rablement am\u00e9liorer vos applications. Apprenons comment enregistrer et charger des objets dans des fichiers binaires gr\u00e2ce \u00e0 des exemples concrets de code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction \u00e0 <strong>Enregistrer des Objets dans un Fichier Binaire en Python<\/strong><\/h2>\n\n\n\n<div id=\"videoContainer\" style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; background: #000;\">\n  <iframe src=\"https:\/\/player.vimeo.com\/video\/583410934?dnt=1&#038;fullscreen=0&#038;pip=0\" loading=\"lazy\" loading=\"lazy\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" frameborder=\"0\" allow=\"autoplay\" allowfullscreen id=\"vimeoPlayer\"><\/iframe>\n  \n  <!-- Popup Desktop -->\n  <div id=\"popupContainer\" class=\"desktop-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 400px; padding: 20px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <h2 style=\"color: #333; font-size: 1.5em; margin: 10px 0;\" id=\"profitez-de-loffre-spciale-\">Profitez de l\u2019offre sp\u00e9ciale !<\/h2>\n    <p style=\"color: #e74c3c; font-size: 1.2em; margin: 10px 0;\">Obtenez notre cours pour seulement <strong id=\"price\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: block; padding: 10px 20px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 1em; margin: 20px auto;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 10px 20px; font-size: 1em;\">Fermer<\/button>\n  <\/div>\n\n  <!-- Popup Mobile -->\n  <div id=\"popupContainerMobile\" class=\"mobile-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 300px; padding: 15px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <p style=\"color: #e74c3c; font-size: 1em; margin: 5px 0;\">Cours sp\u00e9cial \u00e0 <strong id=\"priceMobile\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: inline-block; padding: 8px 15px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 0.9em;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 5px 10px; font-size: 0.9em;\">Fermer<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    var iframe = document.getElementById('vimeoPlayer');\n    var player = new Vimeo.Player(iframe);\n    var isPopupDisplayed = false;\n\n    player.on('play', function() {\n        if (!isPopupDisplayed) {\n            player.on('timeupdate', function(data) {\n                if (data.seconds >= 120 && !isPopupDisplayed) { \/\/ 120 seconds = 2 minutes\n                    \/\/ Pause the video and display the popup\n                    player.pause().then(function() {\n                        if (window.innerWidth > 768) {\n                            document.querySelector('.desktop-popup').style.display = 'block';\n                        } else {\n                            document.querySelector('.mobile-popup').style.display = 'block';\n                        }\n                        fetchPriceAndUpdatePopup();\n                        isPopupDisplayed = true;\n                    });\n                }\n            });\n        }\n    });\n\n    function fetchPriceAndUpdatePopup() {\n        fetch('https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144')\n            .then(response => response.text())\n            .then(html => {\n                var parser = new DOMParser();\n                var fetchedDoc = parser.parseFromString(html, 'text\/html');\n                var priceElement = fetchedDoc.querySelector('.ammount .fw-500');\n                var originalPriceElement = fetchedDoc.querySelector('.ammount del');\n                var price = priceElement ? priceElement.textContent.trim() : '29.5\u20ac';\n                var originalPrice = originalPriceElement ? originalPriceElement.textContent.trim() : '59\u20ac';\n\n                document.getElementById('price').textContent = price;\n                document.getElementById('priceMobile').textContent = price;\n                document.querySelector('.desktop-popup del').textContent = originalPrice;\n                document.querySelector('.mobile-popup del').textContent = originalPrice;\n            })\n            .catch(error => console.error('Error fetching the price:', error));\n    }\n\n    function closePopup() {\n        document.querySelector('.desktop-popup').style.display = 'none';\n        document.querySelector('.mobile-popup').style.display = 'none';\n        player.play(); \/\/ Allows resuming the video only after closing the popup\n    }\n});\n<\/script>\n\n\n\n<p>Enregistrer des objets dans un fichier binaire signifie les convertir en un format qui peut \u00eatre stock\u00e9 dans un fichier et facilement r\u00e9cup\u00e9r\u00e9 plus tard. Le module <code>pickle<\/code> de Python est couramment utilis\u00e9 pour cette t\u00e2che. Ce module permet de s\u00e9rialiser (convertir un objet Python en un flux d&rsquo;octets) et de d\u00e9s\u00e9rialiser (reconstituer un objet Python \u00e0 partir d&rsquo;un flux d&rsquo;octets) des objets Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu&rsquo;est-ce que la S\u00e9rialisation ?<\/h3>\n\n\n\n<p>La s\u00e9rialisation est le processus de conversion d&rsquo;un objet en un format qui peut \u00eatre stock\u00e9 ou transmis et reconstruit ult\u00e9rieurement. En Python, le module <code>pickle<\/code> permet cette conversion. Voici un aper\u00e7u simple :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import pickle\n\ndata = {\"nom\": \"Alice\", \"\u00e2ge\": 25, \"ville\": \"Paris\"}\n\n# S\u00e9rialiser l'objet\nwith open(\"data.pkl\", \"wb\") as f:\n    pickle.dump(data, f)\n\n# D\u00e9s\u00e9rialiser l'objet\nwith open(\"data.pkl\", \"rb\") as f:\n    recovered_data = pickle.load(f)\n\nprint(recovered_data)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Impl\u00e9menter la S\u00e9rialisation pour Enregistrer des Objets dans un Fichier Binaire Python<\/h3>\n\n\n\n<p>Voyons un exemple simple de s\u00e9rialisation d&rsquo;un objet personnalis\u00e9 en Python. Supposons que nous ayons une classe <code>Personne<\/code> que nous voulons enregistrer dans un fichier binaire.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import pickle\n\nclass Personne:\n    def __init__(self, nom, \u00e2ge, ville):\n        self.nom = nom\n        self.\u00e2ge = \u00e2ge\n        self.ville = ville\n\n    def __repr__(self):\n        return f\"Personne(nom={self.nom}, \u00e2ge={self.\u00e2ge}, ville={self.ville})\"\n\n# Cr\u00e9er une instance de Personne\nalice = Personne(\"Alice\", 25, \"Paris\")\n\n# S\u00e9rialiser l'objet\nwith open(\"personne.pkl\", \"wb\") as f:\n    pickle.dump(alice, f)\n\n# D\u00e9s\u00e9rialiser l'objet\nwith open(\"personne.pkl\", \"rb\") as f:\n    recovered_alice = pickle.load(f)\n\nprint(recovered_alice)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">S\u00e9rialiser et D\u00e9s\u00e9rialiser des Collections d&rsquo;Objets dans un Fichier Binaire Python<\/h3>\n\n\n\n<p>Nous pouvons \u00e9galement s\u00e9rialiser une collection d&rsquo;objets. Par exemple, nous pouvons cr\u00e9er plusieurs instances de la classe <code>Personne<\/code> et les stocker dans une liste, puis s\u00e9rialiser cette liste en une seule op\u00e9ration :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import pickle\n\nclass Personne:\n    def __init__(self, nom, \u00e2ge, ville):\n        self.nom = nom\n        self.\u00e2ge = \u00e2ge\n        self.ville = ville\n\n    def __repr__(self):\n        return f\"Personne(nom={self.nom}, \u00e2ge={self.\u00e2ge}, ville={self.ville})\"\n\n# Cr\u00e9er une collection de personnes\npersonnes = [\n    Personne(\"Alice\", 25, \"Paris\"),\n    Personne(\"Bob\", 30, \"Lyon\"),\n    Personne(\"Charlie\", 35, \"Marseille\")\n]\n\n# S\u00e9rialiser la collection d'objets\nwith open(\"personnes.pkl\", \"wb\") as f:\n    pickle.dump(personnes, f)\n\n# D\u00e9s\u00e9rialiser la collection d'objets\nwith open(\"personnes.pkl\", \"rb\") as f:\n    recovered_personnes = pickle.load(f)\n\nfor personne in recovered_personnes:\n    print(personne)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">G\u00e9rer les Erreurs lors de la S\u00e9rialisation dans un Fichier Binaire Python<\/h3>\n\n\n\n<p>Il est important de g\u00e9rer les erreurs potentielles lors de la s\u00e9rialisation et de la d\u00e9s\u00e9rialisation. Si le fichier est corrompu ou le format des donn\u00e9es change, <code>pickle<\/code> pourrait lever des exceptions.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import pickle\n\nclass Personne:\n    def __init__(self, nom, \u00e2ge, ville):\n        self.nom = nom\n        self.\u00e2ge = \u00e2ge\n        self.ville = ville\n\n    def __repr__(self):\n        return f\"Personne(nom={self.nom}, \u00e2ge={self.\u00e2ge}, ville={self.ville})\"\n\ntry:\n    # D\u00e9s\u00e9rialiser la collection d'objets\n    with open(\"personnes.pkl\", \"rb\") as f:\n        recovered_personnes = pickle.load(f)\n    \n    for personne in recovered_personnes:\n        print(personne)\nexcept (pickle.PickleError, EOFError) as e:\n    print(\"Erreur lors du chargement du fichier:\", e)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">S\u00e9curiser les Donn\u00e9es S\u00e9rialis\u00e9es dans un Fichier Binaire Python<\/h3>\n\n\n\n<p>La s\u00e9rialisation avec <code>pickle<\/code> peut \u00eatre risqu\u00e9e si vous importez des donn\u00e9es provenant de sources non fiables. Un attaquant pourrait ins\u00e9rer du code malveillant. Pour \u00e9viter cela, utilisez le module <code>shelve<\/code> de Python ou des formats de s\u00e9rialisation plus s\u00e9curis\u00e9s comme JSON lorsque c&rsquo;est possible.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import shelve\n\nclass Personne:\n    def __init__(self, nom, \u00e2ge, ville):\n        self.nom = nom\n        self.\u00e2ge = \u00e2ge\n        self.ville = ville\n\n    def __repr__(self):\n        return f\"Personne(nom={self.nom}, \u00e2ge={self.\u00e2ge}, ville={self.ville})\"\n\n# Cr\u00e9er une instance de Personne\nalice = Personne(\"Alice\", 25, \"Paris\")\n\n# Utiliser shelve pour stocker l'objet\nwith shelve.open(\"personne_shelve\") as db:\n    db[\"alice\"] = alice\n\n# R\u00e9cup\u00e9rer l'objet\nwith shelve.open(\"personne_shelve\") as db:\n    recovered_alice = db[\"alice\"]\n\nprint(recovered_alice)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion sur Fichier Binaire Python<\/h2>\n\n\n\n<p><strong>Enregistrer des Objets dans un Fichier Binaire en Python<\/strong> est une m\u00e9thode puissante pour persister des donn\u00e9es complexes entre les sessions d&rsquo;ex\u00e9cution. En utilisant le module <code>pickle<\/code> ou en explorant des alternatives comme <code>shelve<\/code>, vous pouvez efficacement s\u00e9rialiser et d\u00e9s\u00e9rialiser des objets Python. Continuez \u00e0 explorer ces concepts pour am\u00e9liorer vos comp\u00e9tences en gestion des donn\u00e9es et construire des applications plus robustes.<\/p>\n\n\n\n<a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/wikiform.fr\/codespace\/wp-content\/uploads\/2024\/07\/learnify-formation-PYTHON-offre-50.gif\" loading=\"lazy\" alt=\"Learnify Formation Python Offre 50%\" title=\"\"><\/a>\n\n\n\n<h2 class=\"wp-block-heading\">Liens Internes Recommand\u00e9s<\/h2>\n\n\n\n<p>N&rsquo;h\u00e9sitez pas \u00e0 explorer d&rsquo;autres articles concernant la manipulation de fichiers en Python, comme <a href=\"https:\/\/wikiform.fr\/codespace\/ouvrir-et-exploiter-un-fichier-en-python\" target=\"_blank\" rel=\"noopener\">ouvrir et exploiter un fichier en Python<\/a>, ou <a href=\"https:\/\/wikiform.fr\/codespace\/enregistrer-des-donnees-dans-un-fichier-python\" target=\"_blank\" rel=\"noopener\">enregistrer des donn\u00e9es dans un fichier Python<\/a>. Pour ceux qui d\u00e9butent, il peut \u00eatre utile de lire le guide complet sur <a href=\"https:\/\/wikiform.fr\/codespace\/installer-python-sur-windows-facilement\" target=\"_blank\" rel=\"noopener\">installer Python sur Windows facilement<\/a>. Si vous voulez approfondir votre compr\u00e9hension des concepts abord\u00e9s ici, consultez \u00e9galement comment <a href=\"https:\/\/wikiform.fr\/codespace\/comprendre-les-variables-en-python\" target=\"_blank\" rel=\"noopener\">comprendre les variables en Python<\/a>.<\/p>\n\n\n\n<p>En continuant votre apprentissage, vous pourriez \u00e9galement b\u00e9n\u00e9ficier de lire sur la <a href=\"https:\/\/wikiform.fr\/codespace\/structures-de-donnees-listes-en-python\" target=\"_blank\" rel=\"noopener\">manipulation des listes en Python<\/a> et la <a href=\"https:\/\/wikiform.fr\/codespace\/structure-conditionnelle-if-else-en-python\" target=\"_blank\" rel=\"noopener\">structure conditionnelle if-else en Python<\/a> pour construire des programmes plus sophistiqu\u00e9s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ressources Externes Utiles<\/h2>\n\n\n\n<p>Pour des informations suppl\u00e9mentaires sur la s\u00e9rialisation en Python, consultez la <a href=\"https:\/\/docs.python.org\/3\/library\/pickle.html\" target=\"_blank\" rel=\"noopener\">documentation officielle de Pickle<\/a>. Il est \u00e9galement utile de se familiariser avec le module <a href=\"https:\/\/docs.python.org\/3\/library\/shelve.html\" target=\"_blank\" rel=\"noopener\">shelve<\/a> pour des solutions de stockage plus s\u00e9curis\u00e9es. Pour ceux qui cherchent \u00e0 approfondir leurs comp\u00e9tences de d\u00e9veloppement, la <a href=\"https:\/\/realpython.com\/python-pickle-module\/\" target=\"_blank\" rel=\"noopener\">ressource Real Python sur Pickle<\/a> est une lecture indispensable.<\/p>\n\n\u00ab\u00a0`","protected":false},"excerpt":{"rendered":"<p>\u00ab\u00a0`html Enregistrer des Objets dans un Fichier Binaire en Python est une comp\u00e9tence cl\u00e9 pour tout d\u00e9veloppeur souhaitant manipuler et conserver des donn\u00e9es de mani\u00e8re&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2916,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5837","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-tutoriels"],"acf":[],"_titre_de_la_formation":null,"_description_":null,"_objectifs_pedagogiques":null,"_programme_":null,"_url_de_limage":null,"_materiel_necessaire":null,"_modalites_devaluation_des_acquis":null,"_moyens_pedagogiques_et_techniques":null,"_accessibilite_":null,"_formateur_":null,"menu_order":0,"_links":{"self":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/comments?post=5837"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5837\/revisions"}],"predecessor-version":[{"id":5838,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5837\/revisions\/5838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2916"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}