Dictionnaire clé fichiers valeurs fonction

Résolu/Fermé
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 - 15 août 2018 à 15:14
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 - 24 août 2018 à 00:07
Bonjour,

Souhaitant utiliser des informations qui ressemblent à des paires "clé:valeurs" (avec beaucoup de valeurs),
j'ai toujours en tête de créer des fichiers textes où le nom de chaque fichier ferait office de clé et les lignes de chaque fichier texte feraient office de valeurs.

Je ne sais pas si le concept est pratique en python, ni comment le mettre en oeuvre, je sais à peine créer et gérer des dossiers et fichiers via python.

Mais si c'est le cas, je suppose qu'une fonction se chargera de transformer en premier lieu, le nom du fichier en clé et en second lieu, les lignes en valeurs, ce qui débouchera à la création d'un dictionnaire. C'est à partir de ce moment là qu'il serait possible d'utiliser les fonctions random, choice, get (etc) qui s'appliquent au dictionnaire.

J'ai besoin d'éclaircissement à ce niveau là, s'il vous plait.

J'ai également l'opportunité d'utiliser le format json ou les classes, mais il serait (selon moi) plus fastidieux de rentrer chaque valeur directement...




A voir également:

4 réponses

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
18 août 2018 à 12:56
bonjour, peux-tu nous en dire plus sur ton contexte et tes objectifs?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 18 août 2018 à 14:58
salut,

je suis dans la continuité du projet initial qui consiste à déterminer une valeur aléatoire à partir d'un fichier texte dont le fichier lui-même serait une clé déterminée aléatoirement (parce qu'il y a plusieurs fichiers).

Tout cela, en appliquant la fonction que nous avions sur le topic "Valeur random de clef random du dictionnaire"

En pratique, dans ce dossier, il y a deux fichiers txt :

import os
path='/Users/Mac/Desktop/programme/script.py'
a= os.listdir('/Users/Mac/Desktop/programme/')
print(a)

>>>['.DS_Store', 'texte2.txt', 'texte1.txt', 'script.py']


il faut adapter cela, le but étant, de pouvoir utiliser le code ci-dessous :

dictionnaire = {
'texte1':['valeur1', 'valeur2'],
'texte2':['valeur11','valeur12']
}
ak= tuple(dictionnaire.keys())
rk=random.choice(ak)
vrk=dictionnaire.get(rk)
rvrk=random.choice(vrk)
print (rk, vrk, rvrk)


Merci pour votre aide précieuse.

PS: bien sûr plus mes connaissances avancerons plus je m'orienterai sur MySQL ou autre pour que le contenu du fichier texte soit hébergé par exemple.
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
18 août 2018 à 17:48
en effet, il faut alors parcourir tous les fichiers et en lire le contenu.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
18 août 2018 à 20:06
import random

import os


path='/Users/Mac/Desktop/programme/script1.py'

a= os.listdir('/Users/Mac/Desktop/programme/')

for element in a:
if element.endswith('.txt'):
#print(element)
myfile=open(element, 'r')
#print(myfile.name)
filecontent=myfile.readlines()
print(filecontent)


>>>['valeur3\n', 'valeur4']
['valeur1\n', 'valeur2']


Donc on se retrouve avec des listes qui contiennent les valeurs des fichiers, il faudra convertir ces listes en valeurs de dictionnaire et les fichiers en clé.
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
18 août 2018 à 20:37
exactement
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
19 août 2018 à 00:08
le petit souci, c'est que les prétendues clés sont de type file.
cela ne pose pas de problème pour les valeurs, mais les clés ne doivent-elles pas être définies en premier?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
19 août 2018 à 10:20
je ne sais pas comment transformer des valeurs de type file en clé de dictionnaire.

--
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
19 août 2018 à 10:36
je me rends compte que tu n'as toujours pas précisément décrit ce que ton programme allait faire, ni pourquoi tu faisais cela.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
19 août 2018 à 21:50
si j'ai expliqué, sur un autre poste, peux-tu m'indiquer la manière à suive s'il te plait ? parce que j'ai des fichiers en type file, mais je vais avoir besoin d'en sélectionner aléatoirement parmi eux.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 20 août 2018 à 21:52
S'il vous plait, auriez vous une idée de comment on fait en python pour qu'un fichier lambda soit l'équivalent d'une clé de dictionnaire lambda ? Est-ce tout simplement possible ? Doit-on faire autrement ?
Dans le but qu'un ensemble de fichiers soit sélectionné aléatoirement à partir d'un répertoire qui en contient beaucoup.

Et pour que par la suite, à partir des fichiers sélectionné précédemment, en mode lecture, le programme sélectionne aléatoirement une valeur, pour chaque fichier, qui correspond en fait, à une ligne dans un des fichiers textes selectionné

Est-ce que ma question est comprise ?

Cordialement

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
20 août 2018 à 22:40
le but de l'exercice n'est-il pas que tu trouves des réponses par toi-même?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 22 août 2018 à 16:45
Voilà , j'ai un peu avancé, mais je ne parviens pas à piocher aléatoirement une ligne du fichier:

import os, random, glob

path='/Users/Mac/Desktop/programme/script1.py'

list = os.listdir('/Users/Mac/Desktop/programme/')


def fonction():
 liste_file = glob.glob('/Users/Mac/Desktop/programme/*.txt')#liste de fichier txt
 aleatoire = random.choice(liste_file)#un fichier au hasard 
 myfile=open(aleatoire, 'r')
 with myfile as f:
  for line in f.readlines():
   ak=line.strip()
   print(ak)

fonction()


pour le moment j'ai le contenu du fichier qui est écrit, je voudrais qu'une seule ligne soit choisie aléatoirement et qu'il soit possible de répéter l'opération sans que ce qui a été choisi (fichier) ne soit réutilisé.


0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
Modifié le 22 août 2018 à 17:36
n'as-tu aucune idée de comment éviter d'utiliser plusieurs fois le même fichier? comment ferais-tu dans la vie réelle, si tu devais choisir une carte au hasard dans un paquet de cartes, puis éviter que cette carte ne participe au tirage suivant?
quelles sont les pistes auxquelles tu as pensé pour choisir une ligne au hasard?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 22 août 2018 à 19:40
pour choisir une liste au hasard, j'utiliserai la fonction random, monsieur.
pour le reste j'imagine qu'il faille créer une liste vide, et
pour 2 fichiers
liste_fichier = []

for i in range (2):
  aleatoire = random.choice(liste_file)#un fichier au hasard 
  if aleatoire in liste_fichier: 
   pass
  else:
   liste_fichier.append(aleatoire)

si il le fichier est déjà dans la liste, on ne fait rien, sinon on utilise .append pour ajouter le nouveau fichier à la liste

Si je dois faire plusieurs tirage, je dois faire une boucle avec range()
ce qui fonctionne
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
22 août 2018 à 19:37
comment ferais-tu dans la vie réelle, si tu devais choisir une carte au hasard dans un paquet de cartes, puis éviter que cette carte ne participe au tirage suivant?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 22 août 2018 à 20:01
dans la vie réelle, je ne remettrai pas la carte tirée dans le paquet de carte avant que tout les tirages soient fait.
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
22 août 2018 à 20:35
bravo, bien vu! effectivement, il faut donc retirer la valeur tirée de la liste, avant le tirage suivant. simple et logique, non? comment proposes-tu d'appliquer cela dans ton programme?
0