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

Python Discussion :

Modifier un objet dans un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut Modifier un objet dans un fichier
    Bonjour.

    J'aimerais vous demander comment je pourrais modifier un objet enregistré dans un fichier. Je crée avec le module pickle un fichier joueurs pour stocker les noms des joueurs grâce aux instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    f=open("joueurs","wb")
    p=pickle.Pickler(f)
    p.dump(["*"]) #J'ai mis "*" juste pour éviter qu'il y ait des problèmes si la liste est vide.
    f.close()
    Mais après j'ai besoin de savoir si le joueur est nouveau sur le jeu ou il est déjà enregistré, et dans le cas où il est nouveau je dois l'enregistrer.
    Pour savoir s'il existe ou non on peut faire les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    j=input("Entrez votre nom")
    f=open("joueurs","rb")
    u=pickle.Unpickler(f)
    liste_des_joueurs=u.load()
    if j in liste_des_joueurs:
       print("Le joueur est déjà existant")
    else:
       print("Le joueur est nouveau")
    f.close()
    Mais dans le cas où le joueur est nouveau, je veux l'enregistrer dans la liste seulement je ne sais quoi faire. Sachant que si je modifie la liste_des_joueurs alors ce n'est que la référence que je modifie puisque la vraie donnée n'est accessible qu'on écriture, et qu'après rien n'est enregistré.

    J'espère que vous pourrez m'aider afin de savoir comment contourner ce problème.

    Merci par avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Salut,

    Si vous utilisiez un fichier texte avec un nom par ligne, vous pourriez y ajouter un nom en l'ouvrant en mode 'a'ppend....
    Avec pickle, vous sauvegardez l'état de l'objet à l'instant t0.
    S'il change en t1, il va falloir le sauvegarder à nouveau en ré-écrivant le fichier.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut
    Bonjour,

    Si je travaille avec les chaîne de caractères je pourrais rajouter effectivement les joueurs à la fin mais si je souhaite enregistrer d'autres informations par exemple le nombre de parties jouées, le score de chaque partie... je ne pourrais modifier le score d'un joueur qui a déjà existé et qui va rejouer puisque l'écriture en 'w' efface tout et l'écriture en 'a' rajoute à la fin...
    Je ne sais pas s'il y a un moyen pour faire cela ou non.

    J'espère que vous pourrez m'aider encore une fois.

    Merci par avance.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Citation Envoyé par ZhaoZhao Voir le message
    J'espère que vous pourrez m'aider encore une fois.
    ré-écrire le fichier... c'est lourd mais pas si compliqué.
    Et si vous voulez quelque chose pour de mettre à jour un enregistrement, une base de donnée comme sqlite3 est à envisager (mais c'est d'autres contraintes).

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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut
    Je vois, donc la seule solution pour travailler avec des fichiers c'est de le ré-écrire.

    Je ne travaille pas avec sqlite3 car je n'y suis pas encore dans mon apprentissage... ^^'

    Merci pour votre aide !

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ZhaoZhao Voir le message
    je ne pourrais modifier le score d'un joueur qui a déjà existé et qui va rejouer puisque l'écriture en 'w' efface tout et l'écriture en 'a' rajoute à la fin...
    Un fichier c'est juste un flot d'octet. Et il est parfaitement possible de se placer à une position X via seek() et écrire "n" caractères. Les caractères viendront remplacer ceux qui s'y trouvent. Mais faut que le fichier soit ouvert en "r+" et non "a" ou "w". Et ça ne marche que si on écrit exactement autant de nouveaux caractères que ce qu'il y a de caractères à remplacer.

    Citation Envoyé par ZhaoZhao Voir le message
    Je vois, donc la seule solution pour travailler avec des fichiers c'est de le ré-écrire.
    Ce n'est pas la seule mais c'est généralement la plus simple à mettre en oeuvre. On charge tout en mémoire en début de programme, puis on réécrit tout le fichier en fin de programme.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 18
    Dernier message: 06/07/2006, 18h40
  2. Ecrire un objet dans un fichier
    Par mikebranque dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2006, 13h39
  3. modifier une variable dans un fichier
    Par Guismay dans le forum Langage
    Réponses: 7
    Dernier message: 11/09/2005, 19h46
  4. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55

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