Vous pouvez essayer ce qui suit:
import pickle
load_written_things = open("written_things.pkl", "rb")
added_stuff = raw_input("write: ")
written_things = pickle.load(load_written_things) + added_stuff
pickle.dump(written_things, open("written_things.pkl", "wb"))
print (written_things)
Update for the 2nd question:
Eh bien, disons que vous avez déversé une liste initiale 'written_things.pkl' comme ceci:
#!/usr/bin/env python
import pickle
# initial list dumped in 'written_things.pkl'
alist = ['name1', 'name2', 'name3']
with open('written_things.pkl', 'wb') as f: pickle.dump(alist,f)
Maintenant, si je compris correctement, vous voulez mettre à jour cette liste avec de nouveaux éléments et vider la nouvelle liste/résultat dans 'written_things.pkl' en utilisant pickle
. Une façon de le faire serait la suivante:
# old stuff
load_written_things = open("written_things.pkl", "rb")
old = pickle.load(load_written_things)
new_item = raw_input('>> New item: ')
with open("written_things.pkl", "w") as f:
pickle.dump(old+[new_item], f)
# to read back the data
with open("written_things.pkl", "rb") as f:
data = pickle.load(f)
ont à l'esprit que de cette manière nous ajoutons un élément à la fois. Donc, si vous voulez saisir plusieurs éléments à la fois, vous pouvez entrer vos articles comme celui-ci: item1,item2,item3
etc ... (ou tout autre séparateur), puis remplacer la ligne:
pickle.dump(old+[new_item], f)
--with ->pickle.dump(old+new_item.split(','), f)
Également une autre chose à considérer comme mentionné here, est que le module pickle est pas sécurisé contre les données erronées ou mal construites. Cela signifie que vous devez vous assurer que les données du fichier .pkl ne sont pas malveillantes. Il existe de nombreuses techniques dans la nature qui permettent l'exécution de code arbitraire avec les cornichons de python.
Comme juste une alternative à pickle
vous pouvez toujours mettre votre sortie (peut être une liste, un dictionnaire etc ...) dans un fichier, puis utiliser ast.literal_eval
pour relire vos données. Comme mentionné dans le module lui-même et aussi here, ast.literal_eval
est considéré comme sûr à utiliser.
Merci pour la réponse. Juste une question. Comment puis-je faire chaque chose ajoutée une entrée séparée dans une liste ou un dictionnaire. Je veux faire un Gui dans lequel les noms seront stockés par l'utilisateur et apparaîtront dans l'étiquette ou la liste. Donc, s'il y a un moyen de séparer chaque donnée ajoutée, j'aimerais vraiment le savoir. Merci encore pour la réponse et merci si vous répondez à cette deuxième question –
@GiannisGiannoulas J'ai ajouté une réponse possible à votre 2ème question! – coder
Merci j'apprécie vraiment votre aide. J'essayais de comprendre pendant 6 heures comment le faire. Et enfin je connais le chemin. –