Question sauvegarde de set
Résolu
yamar
-
yamar -
yamar -
Bonjour,
J'essaie de créer un programme qui va sur un site de générateur de prénom grâce à sélénium. Puis qui me sauvegarde le prénom dans un document afin que quand je relance le programme, je ne perde pas les prénoms enregistrés les dernières fois.
Donc ça me donnerai un truc comme ça :
Mais, j'aimerais que ça ne m'écrive pas deux fois le même prénon. En soit, j'aimerais que se soit un set qui s'ouvre début de mon programme et qui est sauvegardé à la fin de mon programme.
(ce programme est un exercice que je me suis fait pour progresser, alors même si dans ce programme ce n'est pas particulièrement nécessaire, j'aimerais que ça marche assez fluidement même quand il y aura plusieurs milliers de valeurs à tester).
Merci de m'avoir lu
J'essaie de créer un programme qui va sur un site de générateur de prénom grâce à sélénium. Puis qui me sauvegarde le prénom dans un document afin que quand je relance le programme, je ne perde pas les prénoms enregistrés les dernières fois.
Donc ça me donnerai un truc comme ça :
fichier = open('fichier.txt', 'a') prenom = # pour ne pas tout écrire on va dire que prenom = un prénom au hasard fichier.write(' ') fichier.write(prenom) fichier.close()
Mais, j'aimerais que ça ne m'écrive pas deux fois le même prénon. En soit, j'aimerais que se soit un set qui s'ouvre début de mon programme et qui est sauvegardé à la fin de mon programme.
(ce programme est un exercice que je me suis fait pour progresser, alors même si dans ce programme ce n'est pas particulièrement nécessaire, j'aimerais que ça marche assez fluidement même quand il y aura plusieurs milliers de valeurs à tester).
Merci de m'avoir lu
Configuration: Windows / Chrome 98.0.4758.87
A voir également:
- Question sauvegarde de set
- Logiciel de sauvegarde gratuit - Guide
- Set-top box - Accueil - Box & Connexion Internet
- Sauvegarde facile - Télécharger - Sauvegarde
- Sauvegarde android - Guide
- Sauvegarde time machine - Guide
4 réponses
Bonjour,
Effectivement, tu peux stocker tes éléments dans un
Par rapport au code que tu proposes, plutôt que de s'embêter avec
Note que tu peux aussi considérer des formats de stockage binaires (souvent plus compacts et plus rapides à charger) par exemple en utilisant
Une manière plus élégante de procéder, c'est d'utiliser
Tu peux aussi comme le propose yg_be utiliser une base de donnée, même si ici ça me paraît inutilement compliqué. C'est souvent un stockage plus pratique qu'un fichier texte pour permettre des accès concurrents, en particulier quand la donnée est structurable sous forme de tables. Ici on parle d'une simple liste/ensemble. Note que pour gérer les doublons, il faudrait en plus faire des vérifications à l'insertion, bref ça n'est pas forcément le plus pratique.
Bonne chance
Effectivement, tu peux stocker tes éléments dans un
set, puis itérer sur cet ensemble pour réécrire ton fichier. Quand tu ouvres un fichier, je te recommande d'utiliser le context manager dedié (voir
with).
Par rapport au code que tu proposes, plutôt que de s'embêter avec
writetu peux directement utiliser
sys.stdout)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- filename = "prenoms.txt" prenoms = set() with open(filename, "r") as f: for line in f.readlines(): prenom = line.strip() prenoms.add(prenom) prenoms.add("Jessica") with open(filename, "w") as f: print("\n".join(prenoms), file=f)
Note que tu peux aussi considérer des formats de stockage binaires (souvent plus compacts et plus rapides à charger) par exemple en utilisant
pickle. le problème c'est que pickle ne gère pas les
sets donc on est obligé de passer d'y sauver une liste et de la convertir en
set.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pickle filename = "prenoms.pkl" try: with open(filename, "rb") as f: prenoms = set(pickle.load(f)) except: prenoms = {"Léa", "Marc", "Maya"} print(prenoms) prenoms.add("Jessica") with open(filename, "wb") as f: pickle.dump(list(prenoms), f)
Une manière plus élégante de procéder, c'est d'utiliser
dill, qui lui supporte les
set. Son inconvénient (et qui explique peut être pourquoi
pickleest encore utilisé), c'est qu'il n'est pas installé de base (il faut donc l'installer via PIP, e.g.
sudo pip3 install dillou sous Linux via son gestionnaire de paquets, e.g.
sudo apt install python3-dill). Bref, voici à quoi ça ressemble, comme tu peux le voir c'est presque le même code :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pickle filename = "prenoms.dill" try: with open(filename, "rb") as f: prenoms = dill.load(f) except: prenoms = {"Léa", "Marc", "Maya"} print(prenoms) prenoms.add("Jessica") with open(filename, "wb") as f: dill.dump(prenoms, f)
Tu peux aussi comme le propose yg_be utiliser une base de donnée, même si ici ça me paraît inutilement compliqué. C'est souvent un stockage plus pratique qu'un fichier texte pour permettre des accès concurrents, en particulier quand la donnée est structurable sous forme de tables. Ici on parle d'une simple liste/ensemble. Note que pour gérer les doublons, il faudrait en plus faire des vérifications à l'insertion, bref ça n'est pas forcément le plus pratique.
Bonne chance
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
l'étape suivante, je pense, c'est la création du set au démarrage du programme.
l'étape suivante, je pense, c'est la création du set au démarrage du programme.