Bonjour,
J'ai un problème que je n'arrive pas à identifier. Mon but avec ce code est d'ouvrir un fichier *.pkl et d'écrire dedans. Cela est simple mais une fois l'exécution terminée il n'y a plus aucune trace de l'entrée ajoutée dans le fichier *.pkl.
Le code est réparti sur 2 fichiers : Stock.py contenant les fonctions pour serialiser/déserialiser.
Un fichier inter2.py, utilisant Stock.py, et ajoutant une entrée au fichier *.pkl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 # Stock.py #!/usr/bin/env python # -*- coding: utf-8 -*- import pickle def deserialize(fich): pkl_file = open(fich, 'rb') requetes = pickle.load(pkl_file) pkl_file.close() return requetes def serialize(fich, data): output = open(fich, 'wb') pickle.dump(data, output) print"serialise is okay !" output.close()
Ces fonctions sont intégrées au sein d'une interface : la fonction Click_Rq_Save() est utiliser quand on clic pour sauvegarder la session donc. Ce qui entraine l'ouverture d'une nouvelle fenêtre avec un champ Entry. Ce champs avec être utiliser pour donner un nom à une nouvelle entrée dans le dictionnaire "requetes" (nom de variable utilisée lors de l'ouverture du fichier du même). Il s'en suit, par l'intermédiaire de la foncton Seriz la vérification de doublon dans les noms de clés du dictionnaire requetes et ensuite, si cela est possible, l'inscription de la nouvelle entrée dans le dictionnaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #inter2.py #!/usr/bin/env python # -*- coding: utf-8 -*- # (...) requetes = Stock.deserialize('requetes.pkl') def Seriz_Rq(Nam_Rq): print requetes.keys() if Nam_Rq not in requetes.keys() : print "Michel is alive" requetes[Nam_Rq] = Rq.get("1.0", END) Stock.serialize('requetes.pkl', requetes) print requetes else : showerror("Alerte","Nom de requête déjà utilisé") def Fn_Nam_Rq(): def Get_Nam_Rq(): Nam_Rq=Entry_Nam_Rq.get() Fn_Entry.destroy() Seriz_Rq(Nam_Rq) Fn_Entry = Toplevel() label_Nam_Rq = Label(Fn_Entry, text='Entrez le nom de la requete') label_Nam_Rq.grid(row=0,column=0) Entry_Nam_Rq = Entry(Fn_Entry,width=20) Entry_Nam_Rq.grid(row=1,column=0) Entry_Nam_Rq.bind("<Return>", Get_Nam_Rq) Butt_Valid_Nam=Button(Fn_Entry, text='Ok',relief=GROOVE, command=Get_Nam_Rq) Butt_Valid_Nam.grid(row=1,column=1) def Click_Rq_Save(): if len(Rq.get("1.0", END)) != 1: Fn_Nam_Rq() else: Label_Error_Txt.set("Requête non-enregistrée : Champs requête vide") # (...)
Tout ceci fonctionne tant le programme tourne, la vérification des noms des clés, l'inscription dans le dictionnaire, mais dès que le programme est arrêté alors le dictionnaire redevient comme à l'origine (nous avions déjà créé quelques entrées auparavant).
De plus, par moment une erreur 'EOFError' apparaît et ce de manière aléatoire sans avoir touché au code.
Je n'arrive pas trop à identifier la source du problème et comment le résoudre.
Cordialement,
Unic0
Partager