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 :

Comment récupérer les valeurs d'un fichier JSON avec une boucle ?


Sujet :

Python

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut Comment récupérer les valeurs d'un fichier JSON avec une boucle ?
    Bonjour,

    Après avoir récupéré la valeur qui m'intéressait dans un fichier JSON appelée 'title', je souhaite maintenant récupérer tous les autres 'title' de ce fichier.
    Dans le code ci-dessous, je ne récupère que le 1er title[0]. Comment faire une boucle pour parcourir le fichier JSON et récupérer tous les titles restants ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import json        
     
    fichier_json = open('donnees_francais_1.json.', 'r', encoding="utf-8")  
     
    with fichier_json as fichier:
       data = json.load(fichier)      # load décode un fichier json
       print (data)
    # Récupérer le title
       title0 = data[0]['query']['categorymembers'][0]['title']
       print(title0)
    J'ai pensé à quelque chose comme ça, ça me donne une boucle infinie, en fait je ne sais pas comment savoir que le fichier ne contient plus de titles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = 0
    while i < 500:
        print (data[0]['query']['categorymembers'][i]['title'])
    i = i+1

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    C'est normal que tu aies une boucle sans fin, le i = i+1 est en dehors de la boucle.

    Pour lire l'ensemble des données dans une boucle il est préférable, et plus prudent, d'itérer sur les données elles-même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for datum in data[0]['query']['categorymembers']:
        print(datum['title'])

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Merci beaucoup, ça marche

    J'ai une autre question. Pour récupérer la valeur "abbreviate", je dois parcourir l'arborescence comme pour le title. La structure est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
        "query": {
            "pages": {
                "137227": {
                    "pageid": 137227,
                    "ns": 0,
                    "title": "abréger",
                    "iwlinks": [
                        {
                            "prefix": "en",
                            "*": "abbreviate"
                        },
                     ] }}}
    }
    La méthode pour un seul title marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # mettre le title1 dans title
    mon_url = 'https://fr.wiktionary.org/w/api.php?action=query&titles=%s&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids' % title1
    with urllib.request.urlopen(mon_url)as url:
        datas= json.loads(url.read().decode("utf8"))
     
    # Récupérer le pageids
    pageids = datas['query']['pageids'][0]
    print(pageids)
    ## Récupérer le mot traduit
    title2 = datas["query"]['pages'][pageids]["iwlinks"][0]["*"] # pageids entre crochets 
    print(title2)
    Maintenant avec tous les titles du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for datum in data[0]['query']['categorymembers']:
        pageids_0 = datum['pageid']
        print(pageids_0)
     
    ## Récupérer le mot traduit
    for datum in datas['query']['pages'][pageids_0]:
        title2 = datas["iwlinks"][0]["*"] # pageids entre crochets
        print(title2)
    J'arrive à récupérer tous les pageid, mais j'ai une erreur sur le title2, disant comme quoi y a une erreur sur la clé. De plus, il n'a affiché cette erreur que pour une seule clé. Je souhaite que la clé soit prise en compte avec la valeur en même temps.

    Comment régler ça ?

    Merci

Discussions similaires

  1. Récupérer les valeurs d'un fichier xml avec xmllint.
    Par gabydebur dans le forum Linux
    Réponses: 10
    Dernier message: 29/09/2016, 18h47
  2. Réponses: 13
    Dernier message: 09/11/2011, 12h06
  3. Formulaire & Confirm : Comment récupérer les valeurs en javascript ?
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2006, 18h21
  4. Réponses: 4
    Dernier message: 13/11/2006, 17h49
  5. Réponses: 11
    Dernier message: 19/06/2006, 13h51

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