IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Python et Pickle [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Points : 29
    Points
    29
    Par défaut Python et Pickle
    Bonjour à tous,

    je suis en train de coder un programme et j'utilise pickle afin de sauvegarder mes listes.

    Petit problème, la manière dont j'écris mes formules pickle fait que ce dernier ouvre et écrase mon fichier de sauvegarde afin de réécrire dessus.

    Ce qui malheureusement fait que si j'ai une liste avec 3 informations elles disparaîtront à chaque nouvelles sauvegardes. Je voulais savoir comment faire pour que mes données ne soient pas écrasées.

    Excellente journée à vous tous.

    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
    import pickle
     
    a = []#création d'une liste d'entier
    b = ["bonjour tout le monde"]#création d'une liste de caractères
     
    entree = input("Entrez un nouvel élément dans a")
     
    a.append(entree)
     
    with open("liste_a.bin", "wb") as fichier:#ouvrir("nom fichier qu'on donne", écriture de données binaires") en tant que fichier
        pickle.dump(a,fichier,pickle.HIGHEST_PROTOCOL)#pickle.dump --> sauvegarde (élément, le fichier, identification du protocole le plus élevé utilisé par pickle)
        pickle.dump(b,fichier,pickle.HIGHEST_PROTOCOL)
     
    with open("liste_a.bin","rb") as fichier:#pareil qu'en haut sauf que rb c'est pour lire le binaire
        unpickled_liste = pickle.load(fichier)#variable de chargement du fichier
        unpickled_liste1 = pickle.load(fichier)
        print(unpickled_liste,unpickled_liste1)#affichage des variables de chargement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Goulthard Voir le message
    Je voulais savoir comment faire pour que mes données ne soient pas écrasées.
    On lit tout le fichier, on met à jour ce qui doit l'être et on ré-écrit tout le fichier.
    Après vous pouvez regarder des modules comme shelve ou utiliser une base de données comme sqlite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    D'accord merci beaucoup.

    Alors justement mon problème est que je commence à utiliser pickle depuis peu, dans ma liste à chaque fois que j'entre une infos, elle se rajoute à la liste mais comme pickle écrase le contenu précédemment entrer bah ça ne m'arrange pas.

    Pouvez-vous m'indiquer via du code comment faire svp? car je n'ai trouvé aucun site m'expliquant clairement le problème et comment le régler

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Goulthard Voir le message
    Pouvez-vous m'indiquer via du code comment faire svp? car je n'ai trouvé aucun site m'expliquant clairement le problème et comment le régler
    Imaginez un fichier texte de plusieurs lignes: impossible de mettre à jour la 2ème ligne sans ré-écrire tout le fichier. Avec pickle, c'est pareil: utilisez une base de données, ce sera plus simple (et il y a des tutos qui expliquent comment faire ses premiers pas).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup pour votre aide !

    En fait j'ai pu régler mon problème et rester sur pickle. Je pense que j'ai du mal poser ma question mais si en fait ma liste s'écrasait c'est parce que je laissais en début de code a = [].

    Du coup à chaque fois il écrasait de nouveau la liste et ne conservait pas les infos antérieurs ce qui est logique du coup.

    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
    import pickle
     
    with open("liste_a.bin","rb") as fichier:#pareil qu'en haut sauf que rb c'est pour lire le binaire
        unpickled_liste = pickle.load(fichier)#variable de chargement du fichier
        unpickled_liste1 = pickle.load(fichier)
        print(unpickled_liste,unpickled_liste1)#affichage des variables de chargement
     
    a = unpickled_liste#création d'une liste d'entier
    b = ["bonjour tout le monde"]#création d'une liste de caractères
     
    entree = input("Entrez un nouvel élément dans a")
     
    a.append(entree)
     
    with open("liste_a.bin", "wb") as fichier:#ouvrir("nom fichier qu'on donne", écriture de données binaires") en tant que fichier
        pickle.dump(a,fichier,pickle.HIGHEST_PROTOCOL)#pickle.dump --> sauvegarde (élément, le fichier, identification du protocole le plus élevé utilisé par pickle)
        pickle.dump(b,fichier,pickle.HIGHEST_PROTOCOL)
     
    c = int(a[4]) + 10
    print("c : ",c)
     
    e = [1,2,3]
    e.remove(int(input("entrez la valeur à retirer")))
    print(e)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo