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

Réseau/Web Python Discussion :

Navigation et édition d'éléments d'un dictionnaire / d'une instance JSON [Python 3.X]


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 37
    Par défaut Navigation et édition d'éléments d'un dictionnaire / d'une instance JSON
    Bonjour,
    J'ai utilisé une instance Json sans [trop] de soucis. Mais je veux aller plus loin.
    Description du projet:
    avoir une base Json qui contient les références d'une bibliothèque musicale
    la bibliothèque a plusieurs niveaux
    -genre musical
    ----Groupe dans le genre
    -------Albums du groupe
    Chaque niveau comporte des caractéristiques propres

    Je sais ouvrir la base Json et la mettre dans un dictionnaire.

    Mais ce que je n'arrive pas à trouver (j'ai vraiment cherché) c'est comment extraire un niveau (genre - Groupe - Album), comment ajouter/modifier un élément au plus fin (Album).
    J'ai peur que le chargement en dictionnaire ne permette pas d'extraire un élément comme on pourrait le faire dans une base de donénes.
    Je vous soumets une maquette qui peut facilement se lire avec le site en ligne.
    Source
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    {
      "genre": [
        {
          "name": "Hard Metal",
          "color": "Black",
          "groupes": [
            {
              "name": "AC-DC",
              "icon": "AC-DC.png",
              "albums": [
                {
                  "name": "Highway To Hell",
                  "year": "1979",
                  "icon": "HighwayToHell.png",
                  "lyrics": "Highway.txt"
                },
                {
                  "name": "Back In Black",
                  "year": "2000",
                  "icon": "BinB.png",
                  "lyrics": "Back.txt"
                }
              ]
            },
            {
              "name": "Deep Purple",
              "icon": "DeepPurple.png",
              "albums": [
                {
                  "name": "Infinite",
                  "year": "2017",
                  "icon": "Infinite.png",
                  "lyrics": "Infinite.txt"
                }
              ]
            }
          ]
        },
        {
          "name": "Classical",
          "color": "Blue",
          "groupes": [
            {
              "name": "Mozart",
              "icon": "Mozart.png",
              "albums": [
                {
                  "name": "String K563",
                  "year": "1791",
                  "icon": "String Ensemble.png",
                  "lyrics": ""
                }
              ]
            }
          ]
        }
      ]
    }
    Merci de vos retours.

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

    Pour accéder à du JSON depuis Python, vous pouvez utiliser la bibliothèque standard json.
    Après il va falloir apprendre à naviguer dans votre structure de données.
    Dans le tout début:
    se lit un dictionnaire (le '{') ayant pour clef "genre". La valeur associée est une liste (le '[') de dictionnaires (le '{'). Chacun ayant pour clefs "name" et "groupes"...

    Donc il faut être à l'aise avec listes et dictionnaires.

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

  3. #3
    Membre averti
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 37
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    .......
    se lit un dictionnaire (le '{') ayant pour clef "genre". La valeur associée est une liste (le '[') de dictionnaires (le '{'). Chacun ayant pour clefs "name" et "groupes"...
    ....
    Bonsoir,

    Donc, si je comprends bien (en essayant de structurer ma réponse):
    ...le dictionnaire 'genre' contient une liste de genres
    ......dont chaque élément est un dictionnaire qui contient une liste de groupes
    .........dont chaque élément est un dictionnaire qui contient une liste d'albums
    ............qui ont chacun leurs caractéristiques.
    En faisant des boucles imbriquées je devrais avoir toutes les caractéristiques de chaque élément final non ?

    Je vais essayer de faire un programme de test pour voir...

    A SUIVRE...

    En fait, j'ai testé avec ce petit programme qui ne fait que lire chaque élément en descendant dans les arborescnces. Mais une fois lu, comment créer un nouveau genre, un nouveau groupe, un nouvel album ?????
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    # MJ = fichier Music.Json
    # DM = Dictionnaire de Musique
    # LG = Liste des Genres
    # GN = Genre Nom
    # GC = Genre Couleur
    # DP = Dictionnaire des Groupes
    # PN = Groupe Nom
    # PI = Groupe Icone
    # DA = Dicionnaire des Albums
    # AN = Album Nom
    # AY = Album Year
    # AI = Album Icone
    # AL = Album Lyrics
    #
    import json
    with open('Music.json') as MJ:
    	DM = json.load(MJ)
    LG=DM['genre']
    for G in LG:
    	GN=G['name']
    	GC=G['color']
    	DP=G['groupes']
    	for P in DP:
    		PN=P['name']
    		PI=P['icon']
    		DA=P['albums']
    		for A in DA:
    			AN=A['name']
    			AY=A['year']
    			AI=A['icon']
    			AL=A['lyrics']
    			print('Genre: ',GN,' Couleur: ',GC)
    			print('Groupe: ',PN,' Icone: ',PI)
    			print('Album: ',AN,' Annee: ',AY,' Icone: ',AI,' paroles: ',AL)
    			print('----------------------------')
    MJ.close()

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

    Citation Envoyé par Vangeles Voir le message
    comment créer un nouveau genre, un nouveau groupe, un nouvel album ?????
    A la base, vous avez une structure hiérarchique ou un arbre (un peu comme les répertoires de votre disque dur). Vous avez la notions de nœuds (les endroits où on peut ajouter/retirer un sous/arbre) et de feuilles (les extrémités).

    "genre", "groupe", "album" sont des nœuds.

    Pour ajouter un album, il va falloir écrire une fonction qui facilite sa création à partir d'une liste de valeurs (à associer aux clefs du dictionnaire correspondant).
    Puis une fonction qui ajoute cet album à....

    C'est pas compliqué: juste fastidieux!

    note: le "must" serait de fabriquer une hiérarchie de classes Python qui aide à naviguer la dedans. Mais c'est un exercice très difficile (si on veut le faire "bien).

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

  5. #5
    Membre averti
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 37
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est pas compliqué: juste fastidieux!......... Mais c'est un exercice très difficile (si on veut le faire "bien).
    - W
    Bonjour,
    L'avantage c'est que j'ai compris.
    L'inconvénient c'est que mon niveau en Python et mes goûts pour le simple me découragent d'aller plus avant dans une solution liée à la structure que j'avais imaginée.
    Je m'oriente donc vers trois fichiers json
    - un pour les genres
    - un pour les artistes
    - un pour les albums
    chaque élément "albums" pouvant faire référence aux 2 autres dictionnaires.
    Comme conseille le dicton: "Ce que l'on conçoit bien s'énonce clairement". Je veux donc rester à mon humble niveau.
    Merci @wiztricks pour cette aide éducative.
    Cordialement

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

Discussions similaires

  1. [Python 3.X] Ecrire les éléments d'un dictionnaire dans un fichier excel
    Par StarrK dans le forum Général Python
    Réponses: 4
    Dernier message: 27/02/2018, 22h17
  2. [Python 2.X] Navigation répertoire et effacer élément (os.path)
    Par Ben20 dans le forum Général Python
    Réponses: 1
    Dernier message: 06/03/2015, 12h08
  3. Réponses: 6
    Dernier message: 04/05/2007, 14h41
  4. Réponses: 2
    Dernier message: 29/06/2006, 11h38
  5. Réponses: 4
    Dernier message: 26/04/2006, 17h43

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