Dump une variable vers un fichier puis faire l'inverse ?

Résolu
mortel - 21 janv. 2025 à 16:48
mamiemando Messages postés 33648 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2025 - 22 janv. 2025 à 11:40

Bonjour

Débutant en python, je me pose une interrogation.

Sur un outil dans le serveur entreprise, il permet de coder en python pour traiter entre autre la variable script_data de la fonction ScriptMain

exemple : def ScriptMain(script_data,reserved):

je voudrais travailler en "offline" sur mon PC, je me demandais si c'est possible de :

- sur le serveur entreprise, exporter/dump la variable  script_data vers un fichier A

- transferer le fichier A du serveur vers mon PC

- sur mon PC, dans mon script python, importer le contenu du fichier A dans une variable script_data et pouvoir faire des traitements sur la variable script_data comme si je travaillais sur le serveur

Cdt

A voir également:

2 réponses

mamiemando Messages postés 33648 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2025 7 846
Modifié le 22 janv. 2025 à 11:47

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 :

  1. Soit on remplace juste dans l'exemple ci-dessus toutes les occurrences de pickle par dill
  2. 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 admettant 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

1
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 Ambassadeur 1 579
21 janv. 2025 à 19:28

bonjour,

Tu peux, en effet, modifier le programme python pour sauvegarder la valeur d'une variable dans un fichier, ou pour lire un fichier et modifier la valeur d'une variable.

La méthode exacte dépend du type de la variable.

0