Dump une variable vers un fichier puis faire l'inverse ?
Résolu mortel -
mamiemando Messages postés 33700 Date d'inscription Statut Modérateur Dernière intervention 22 janv. 2025 à 11:40
mamiemando Messages postés 33700 Date d'inscription Statut Modérateur Dernière intervention 22 janv. 2025 à 11:40
A voir également:
- Dump une variable vers un fichier puis faire l'inverse ?
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Bonjour,
Le module pickle, installé par défaut, sert précisément à sauver une variable dans fichier binaire, pour pouvoir la recharger ultérieurement. En informatique, ces opérations sont respectivement appelées sérialisation et desérialisation (ce n'est pas spécifique juste à python).
import pickle d = { "a": {1, 2, 3}, "b": {4, 5, 6}, } # Sauvegarde with open("toto.pkl", "wb") as f_pkl: pickle.dump(d, f_pkl) # Chargement with open("toto.pkl", "rb") as f_pkl: d2 = pickle.load(f_pkl) print(d2)
Dans les versions modernes de python, pickle peut à peu près tout sérialiser, y compris des objets, des frozensets, etc.. ce qui n'était pas le cas dans des temps plus reculés. À cette époque on pouvait avoir recours à dill. Ce module s'utilise exactement de la même manière :
- Soit on remplace juste dans l'exemple ci-dessus toutes les occurrences de pickle par dill
- Soit (plus élégant et plus pratique) on fait croire à python que dill est le module pickle en remplaçant la première ligne par :
import dill as pickle
Toutefois il faut garder en tête que certains types sont non sérialisable, par exemple les générateurs.
Points importants :
- Qu'on parle de pickle ou dill, au moment de charger un pickle, les types impliqués doivent être connus. Cela veut dire que si tu sauves sur une machine A un pickle impliquant un type T, et que tu tentes de charger sur une machine B ce pickle alors que le type T n'est pas connu, alors le chargement échouera. C'est par exemple le cas si le type T est apporté par un module python installé sur A mais pas sur B.
- Le module json permet de sérialiser une variable au format JSON (en ettant que celle-ci soit JSON-sérialisable). C'est moins performant en temps et en espace que pickle (puisque le texte généré sera plus volumineux et qu'il faudra faire plus qu'une copie mémoire), mais cela permet de s'interfacer avec des programmes qui ne sont pas écrits en python.
Bonne chance