Dictionnaire clé fichiers valeurs fonction

[Résolu/Fermé]
Signaler
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
-
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
-
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...




4 réponses

Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906
bonjour, peux-tu nous en dire plus sur ton contexte et tes objectifs?
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906 >
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020

en effet, il faut alors parcourir tous les fichiers et en lire le contenu.
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
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é.
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906 >
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020

exactement
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
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?
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906 >
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020

quel est le soucis, peux-tu donner un exemple?
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.
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
je ne sais pas comment transformer des valeurs de type file en clé de dictionnaire.

--
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906
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.
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
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.
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
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

Quand il y aura un mur sur ta route, retournes sur tes pas.
Au départ, il y avait une autre route juste à côté, la bonne.        
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906
le but de l'exercice n'est-il pas que tu trouves des réponses par toi-même?
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
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é.


Quand il y aura un mur sur ta route, retournes sur tes pas.
Au départ, il y avait une autre route juste à côté, la bonne.        
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906 >
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020

tu y étais presque en #19, pourquoi avoir tout changé?
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
J'ai fait autrement, en utilisant un Random.sampling

Et ça fonctionne en 2 lignes

Le programme s'appellera "le chapeau magic" en hommage à pv.

Pour des raison de droit, il s'appellera le nom de la note de musique "Si"
Messages postés
17099
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2021
906 >
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020

peux-tu alors marquer le sujet comme résolu, via la roue dentée à droite du titre?
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
Je te remercie yg_be pour l'aide fournie prise sur ton temps libre.
Messages postés
50
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
24 mars 2020
1
Je suis parvenu à écrire ce petit programme

# -*- coding: utf-8 -*-
import os, random, glob

path='/script1.py'
list = os.listdir('/programme/')
Do = glob.glob('//programme/*.txt')#liste de fichier txt

def Si():
	Re=random.sample(Do, 2)# crée une liste z avec un nombre défini de fichier aléatoire venant du dossier
	for La in Re:

		Mi=open(La, 'r')
		Sol=random.choice(Mi.readlines())
		Fa=Sol.rstrip('\n')
		print('{} et {}'.format(La,Fa))  

Si()