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 :

Modifications d'un fichier JSON


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Modifications d'un fichier JSON
    Bonjour à tous,

    j'aimerais modifier un fichier JSON de ce type :

    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
     
    [
       {
          "coordinates": {
             "timestamp": "1514704817"
          }, 
          "identification": {
             "producer": "réseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {}
          }, 
          "values": {
             "000000": "145.87 MB", 
             "000108": "2.71 GB", 
             "010100": "2.48 GB", 
             "010200": "1.55 GB", 
             "010400": "7.46 GB", 
             "010500": "1.76 GB", 
             "010600": "6.72 GB", 
             "010700": "3.57 GB", 
             "010900": "5.13 GB", 
             "011000": "3.16 GB",
             "098900": "8.52 GB"
          }
       }
    ]
    en ce type :

    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
     
    [
       {
          "coordinates": {
             "timestamp": "1514704817"
          }, 
          "identification": {
             "producer": "réseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {}
          }, 
          "values": {
             000000: 0,145, 
             000108: 2.71, 
             010100: 2.48, 
             010200: 1.55, 
             010400: 7.46, 
             010500: 1.76, 
             010600: 6.72, 
             010700: 3.57, 
             010900: 5.13, 
             011000: 3.16,
             098900: 8.52
          }
       }
    ]
    J'aimerais donc pouvoir enlever les guillemets et transformer les valeurs de la partie de droite en décimal et en GB (145.87 MB devient 0.145 (GB) )

    Si jamais vous pouviez m'aider, je ne sais même pas si ce que je dis est réalisable

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Xam29870 Voir le message
    Si jamais vous pouviez m'aider, je ne sais même pas si ce que je dis est réalisable
    Tant qu'il s'agit de remplacer une chaîne de caractères par une autre, c'est réalisable.

    Par contre, si vous supprimez les guillemets, vous fabriquez un fichier qui ne sera plus correct côté syntaxe JSON (i.e. au départ vous aviez un fichier JSON, à l'arrivée ce sera toujours un fichier texte mais il ne sera plus lisible par un parseur JSON).

    Donc au départ on lance la console Python pour pouvoir travailler sur les données:
    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
    >>> data = '''[
    ...    {
    ...       "coordinates": {
    ...          "timestamp": "1514704817"
    ...       },
    ...       "identification": {
    ...          "producer": "réseau"
    ...       },
    ...       "meta": {
    ...          "name": "test",
    ...          "tags": {}
    ...       },
    ...       "values": {
    ...          "000000": "145.87 MB",
    ...          "000108": "2.71 GB",
    ...          "010100": "2.48 GB",
    ...          "010200": "1.55 GB",
    ...          "010400": "7.46 GB",
    ...          "010500": "1.76 GB",
    ...          "010600": "6.72 GB",
    ...          "010700": "3.57 GB",
    ...          "010900": "5.13 GB",
    ...          "011000": "3.16 GB",
    ...          "098900": "8.52 GB"
    ...       }
    ...    }
    ... ]'''
    Puis on utilise le module "json" pour parser ces données et en faire un composite Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> import json
    >>> z = json.loads(data)
    Comme on veut modifier le contenu de "values", on crée une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> values = z[0]['values']
    >>> values
    {'000108': '2.71 GB', '000000': '145.87 MB', '010600': '6.72 GB', '098900': '8.5
    2 GB', '010100': '2.48 GB', '010900': '5.13 GB', '011000': '3.16 GB', '010500':
    '1.76 GB', '010200': '1.55 GB', '010700': '3.57 GB', '010400': '7.46 GB'}
    Puis on modifie les valeurs associées à chaque clef:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for key in values:
    ...     values[key] = str(round(float(values[key].split()[0]) / 1000 ,3))
    >>> values
    {'000108': '0.003', '000000': '0.146', '010600': '0.007', '098900': '0.009', '01
    0100': '0.002', '010900': '0.005', '011000': '0.003', '010500': '0.002', '010200
    ': '0.002', '010700': '0.004', '010400': '0.007'}
    >>>
    Et si le résultat convient, on remet le composite Python sous forme de chaine de caractères avec json.dumps et on écrit le tout dans un fichier.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup de ta réponse,
    En effet, je n'avais pas réfléchi que si je supprimais les guillemets des données de gauche, ça ne ressemblerais plus à du json.

    Du coup, j'aimerais que ça ressemble à ça (conserver les guillemets des données de gauche mais supprimer les guillemets des données à droites) :

    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
     
    [
       {
          "coordinates": {
             "timestamp": "1514704817"
          }, 
          "identification": {
             "producer": "réseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {}
          }, 
          "values": {
             "000000": 0,145, 
             "000108": 2.71, 
             "010100": 2.48, 
             "010200": 1.55, 
             "010400": 7.46, 
             "010500": 1.76, 
             "010600": 6.72, 
             "010700": 3.57, 
             "010900": 5.13, 
             "011000": 3.16,
             "098900": 8.52
          }
       }
    ]
    et d'après la ligne que tu as écrites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    values[key] = str(round(float(values[key].split()[0]) / 1000 ,3))
    Tu divises toutes les données par 1000. Or ici, j'aimerais que la donnée soit en GB donc, si c'est marqué MB, ça se divise bien par 1000, si c'est marqué GB, qu'on affiche la donnée en elle-même et que si c'est marqué TB, que ça multiplie par 1000.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Xam29870 Voir le message
    Tu divises toutes les données par 1000. Or ici, j'aimerais que la donnée soit en GB donc, si c'est marqué MB, ça se divise bien par 1000, si c'est marqué GB, qu'on affiche la donnée en elle-même et que si c'est marqué TB, que ça multiplie par 1000.
    Je vous ai juste donné un exemple de ce qu'il faut faire.
    Pour les détails, comme vous êtes quand même supposé savoir un peu programmer avant même de poster, il va falloir que vous codiez un peu.

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

Discussions similaires

  1. [Properties] Modif d'un fichier properties avec Commentaires
    Par snetechen dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/10/2006, 16h00
  2. Temps écoulé pour la modification d'un fichier
    Par pouet33 dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2005, 12h41
  3. Réponses: 20
    Dernier message: 17/03/2005, 15h26
  4. Est-il possible de détecter la modification d'un fichier ?
    Par Kokito dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/06/2004, 10h42
  5. [langage] Date de modification d'un fichier
    Par Cyspak dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2003, 15h49

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