Python - ajouter à une liste marinés
J'ai du mal à joindre une liste dans un marinés fichier.
C'est le code:
#saving high scores to a pickled file
import pickle
first_name = input("Please enter your name:")
score = input("Please enter your score:")
scores = []
high_scores = first_name, score
scores.append(high_scores)
file = open("high_scores.dat", "ab")
pickle.dump(scores, file)
file.close()
file = open("high_scores.dat", "rb")
scores = pickle.load(file)
print(scores)
file.close()
La première fois que je lance le code, il imprime le nom et le score.
La deuxième fois que je lance le code, il imprime les 2 noms et 2 scores.
La troisième fois que je lance le code, il imprime le nom de la première et de la partition, mais il écrase le deuxième nom et de marquer des points avec le troisième nom et le score que j'ai entré. J'ai juste envie de continuer à ajouter des noms et des scores. Je ne comprends pas pourquoi il est d'enregistrer le prénom et l'écrasement de la seconde.
OriginalL'auteur Charlie | 2015-01-21
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour tirer la liste à partir de votre base de données (par exemple, votre fichier pickle) d'abord, avant d'ajouter.
Merci aussi pour l'explication supplémentaire que vous avez fournie avec le code.
Pourquoi vérifier si le fichier existe, si vous venez de charger une nouvelle variable, et d'éviter la vraie question?
Je suppose que je ne sais pas comment appeler cornichon.charger à partir d'un fichier inexistant. Je sais que vous pouvez le faire avec DBv2 de l'API des modules (par exemple, laisser de côté), mais je ne suis pas au courant d'un fichier-comme l'objet (qui cornichon.charge exige) qui peut être ouvert dans une "créer" de la mode (sans la création d'un). Sinon, mon objectif était d'avoir un script qui peut être exécuté à plusieurs reprises à partir de la ligne de commande, à chaque fois que l'ajout d'un nouveau (nom,score) n-uplet.
mode
ab
au lieu dewb
va créer un fichier si il n'existe pas, et ajouter si l'on fait. D'ailleurs, je n'étais pas suggérer que vous devriez essayer deload
à partir d'un fichier inexistant -- simplement de souligner que l'OP question est plus généralement celui de "détricotage" dans un objet qui a le même nom que la liste existante -- et détruisant ainsi toute modification à la liste existante qui ont été faites après ladump
.OriginalL'auteur dogwynn
Si vous voulez écrire et de lire à la mariné fichier, vous pouvez appeler dump plusieurs fois pour chaque entrée dans la liste. Chaque fois que vous videz, vous ajoutez une note sur une marinés fichier, et chaque fois que vous chargez-vous de lire le prochain score.
La raison que votre code n'était pas le plus probable, c'est que vous êtes en remplacement de l'original
scores
avec le unpickled liste des scores. Donc, si il y avait des nouvelles partitions ajoutées, vous auriez du coup en mémoire.Donc, c'est plus d'un python nom de problème de référence pour
scores
, que c'est unpickle
question.Pickle
est juste de l'instanciation d'une nouvelle liste et en l'appelantscores
(dans votre cas), et puis il collecte des ordures quelque chosescores
a été souligné avant que.Pourquoi est-cornichon à l'aneth ici?
parce que je utiliser
dill
au lieu depickle
, c'est ce que j'ai utilisé pour ma solution.pickle
fonctionne aussi, donc au lieu de modifier mon code, j'ai juste changé l'importation. C'est l'ensemble des prélèvements...dill
est juste de mieux en mieux.OriginalL'auteur Mike McKerns
Ne marche pas réellement répondre à la question, mais si quelqu'un souhaite ajouter un seul élément à la fois à un cornichon, vous pouvez le faire par...
Comme en témoignent les 5 premiers mots de la poste.
Merde, ne l'a pas lu. Mon mauvais
Pas de soucis! Vous avez eu raison, tous les bons. 🙂
OriginalL'auteur CENTURION
N'utilisez pas de cornichon, mais l'utilisation h5py qui résout également votre but
source
hickle
ouklepto
à la place? Ils sont tous les deux conçus pour vous donner un simpledump
etload
cornichon-l'équivalent de la syntaxe pour HDF5. Si vous remplacezdill
dans ma réponse avechickle
, je crois qu'il doit travailler, et de les stocker en tant que HDF5.Oui, il fonctionne. Merci pour l'info. Je ne savais pas à propos de hickle.
OriginalL'auteur Dheeraj M Pai