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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    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
    Par défaut Modifications d'un fichier JSON
    Bonjour,

    alors voilà j'aimerais modifier mon fichier JSON ci-dessous :

    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"
          }
       }
    ]
    pour qu'il soit égale à ça (ci-dessous) :

    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
          }
       }
    ]
    En gros j'aimerais supprimer les guillemets sur la colonne de droite de mes données et j'aimerais aussi faire en sorte que les données de droite soit toutes en GB, donc si un MB/TB/B apparait dans la colonne de droite, ça modifie bien pour faire en sorte que ça soit en GB.

    Voici mon code :
    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
     
    import json as simplejson
     
    #Creation des fichiers pour archivage
    lecture_donnees = "conso-epure-2018-01-23.txt"
     
    #Chargement du fichier au format Json
    with open('FormatJSON.txt', 'r') as f: fichier = simplejson.load(f)
     
    #Ouvre le fichier contenant les donnees en lecture
    with open(lecture_donnees , 'r') as f:   datas = dict([line.rstrip().split(' ', 1) for line in f])
    fichier[0]['values'].update(datas)
     
    for key, value in datas.iteritems():
        print(int(key), value)
     
    format_json_conso = "json-conso-donnees-2018-01-23.txt"
     
    with open(format_json_conso,'w') as f:
    	simplejson.dump(fichier, f, indent =3, sort_keys=True)
     
    print simplejson.dumps(fichier, indent=3, sort_keys=True)
    Le fichier "FormatJSON.txt" étant mon fichier contenant la base de mon format et le fichier "conso-epure-2018-01-23.txt" étant mon fichier contenant les données que j'ajoute à mon format JSON.

    Bonne journée.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    On va as déjà aidez à ce propos ici me semble-t-il ...

    https://www.developpez.net/forums/d1...-fichier-json/

    On ne va quand même pas écrire à votre place le bout de code qui va regarder les 2 derniers caractères de chaque chaine et de faire fois 1000 ou fois un million si on détecte Mb ou Gb ...

  3. #3
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    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
    Par défaut
    Ok, mais il y a un moyen de supprimer les guillemets seulement sur une colonne précise par rapport à mon besoin ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par Xam29870 Voir le message
    Ok, mais il y a un moyen de supprimer les guillemets seulement sur une colonne précise par rapport à mon besoin ?
    Il suffit de supprimer le "str" qui était dans le code précédent.
    Donc c'est possible.
    Maintenant, çà serait bien d'exposer les difficultés rencontrées pour faire çà.

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

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    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
    Par défaut
    Re-bonjour,

    déjà merci de ta réponse.

    J'ai un peu près réussi ce que je voulais faire grâce à vous, excepté un point.

    Voici mon code :
    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
     
    #Creation des fichiers pour archivage
    lecture_donnees = "conso-epure-2018-01-23.txt"
     
    #Chargement du format Json
    with open('FormatJSON.txt', 'r') as f: 
        fichier = simplejson.load(f)
     
     
    #Ouvre le fichier contenant les donnees en lecture
    #Permet de recuperer les donnees
    with open(lecture_donnees , 'r') as f:
        datas = dict([line.rstrip().split(' ', 1) for line in f])
     
     
    for key in datas:
        if datas[key].split()[1] == ("TB"):
            datas[key] = round(float(datas[key].split()[0]) * 1000 ,3)
        elif datas[key].split()[1] == ("GB"):
            datas[key] = round(float(datas[key].split()[0]),3)
        elif datas[key].split()[1] == ("MB"):
            datas[key] = round(float(datas[key].split()[0]) / 1000 ,3)
        elif datas[key].split()[1] == ("KB"):
            datas[key] = round(float(datas[key].split()[0]) / 1000000, 5)
     
    fichier[0]['values'].update(datas)
     
    print fichier
     
    format_json_conso = "json-conso-donnees-2018-01-23.txt"
     
    with open(format_json_conso,'w') as f:
        simplejson.dump(fichier, f, indent =3, sort_keys=True)
     
    print simplejson.dumps(fichier, indent=3, sort_keys=True)
    Voici le résultat :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    [
       {
          "coordinates": {
             "timestamp": "1515141243"
          }, 
          "identification": {
             "producer": "réseau"
          }, 
          "meta": {
             "name": "test", 
             "tags": {}
          }, 
          "values": {
             "000000": 0.123, 
             "000108": 1.74, 
             "010100": 1.47, 
             "010200": 0.506, 
             "010400": 3.43, 
             "010500": 0.948, 
             "010600": 3.04, 
             "010700": 1.06, 
             "010900": 2.63, 
             "011000": 1.17, 
             "011200": 2.07, 
             "011300": 0.932, 
             "011400": 2.07, 
             "015200": 0.423, 
             "015400": 0.475, 
             "015500": 1.55, 
             "015600": 2.23, 
             "016000": 0.984, 
             "016500": 1.27, 
             "016600": 0.573, 
             "016700": 0.203, 
             "016800": 1.018, 
             "017000": 2.04, 
             "019300": 0.579, 
             "019400": 0.597, 
             "019700": 0.816, 
             "031300": 0.625, 
             "032800": 1.21, 
             "033000": 0.432, 
             "034000": 1.24, 
             "035200": 1.08, 
             "037400": 0.256, 
             "050100": 1.06, 
             "050200": 0.493, 
             "050300": 0.344, 
             "050500": 0.632, 
             "050600": 0.404, 
             "050700": 0.862, 
             "050800": 0.211, 
             "050900": 0.345, 
             "051000": 0.656, 
             "051100": 1.59, 
             "051200": 0.512, 
             "051300": 0.251, 
             "051400": 0.526, 
             "051500": 1.86, 
             "051600": 0.25, 
             "051800": 0.277, 
             "051900": 1.09, 
             "053700": 0.321, 
             "053800": 0.787, 
             "053900": 0.466, 
             "054000": 1.77, 
             "054100": 0.985, 
             "054200": 1.07, 
             "054300": 0.766, 
             "054400": 0.563, 
             "054500": 0.655, 
             "054600": 2.19, 
             "054700": 1.31, 
             "054800": 1.34, 
             "054900": 1.53, 
             "055000": 2.31, 
             "055100": 0.603, 
             "055200": 1.25, 
             "055300": 2.73, 
             "055400": 2.31, 
             "055500": 0.564, 
             "055600": 2.12, 
             "055700": 0.64, 
             "055800": 0.414, 
             "055900": 0.732, 
             "056000": 0.342, 
             "056100": 0.401, 
             "056300": 0.352, 
             "056400": 0.476, 
             "056500": 0.689, 
             "056600": 0.662, 
             "057900": 0.168, 
             "058000": 0.65, 
             "058100": 0.846, 
             "058200": 0.344, 
             "058300": 0.429, 
             "058400": 0.446, 
             "058500": 0.614, 
             "058600": 0.336, 
             "058700": 0.221, 
             "058800": 0.309, 
             "058900": 0.222, 
             "060100": 0.004, 
             "060400": 0.004, 
             "060500": 0.001, 
             "060600": 0.00065, 
             "060700": 0.03, 
             "060800": 0.009, 
             "061100": 0.0, 
             "061200": 0.0, 
             "061300": 1e-05, 
             "061400": 0.0, 
             "061500": 0.00029, 
             "061600": 0.00049, 
             "062200": 0.0, 
             "062300": 0.002, 
             "062500": 0.0, 
             "062700": 0.002, 
             "062800": 0.00047, 
             "063200": 0.00024, 
             "063300": 0.0, 
             "063500": 0.0, 
             "063800": 0.00026, 
             "070100": 1.13, 
             "070200": 1.52, 
             "070300": 3.26, 
             "070400": 2.15, 
             "070500": 1.78, 
             "071300": 1.013, 
             "071400": 1.53, 
             "071500": 1.56, 
             "071600": 0.87, 
             "071700": 1.51, 
             "071800": 1.59, 
             "071900": 1.45, 
             "072000": 0.983, 
             "072100": 1.1, 
             "072200": 2.85, 
             "072300": 1.6, 
             "072400": 0.956, 
             "072500": 0.969, 
             "072600": 1.51, 
             "076500": 2.67, 
             "076800": 1.01, 
             "076900": 0.441, 
             "077000": 1.79, 
             "077300": 1.05, 
             "077500": 1.07, 
             "077900": 1.49, 
             "078000": 0.323, 
             "078100": 0.298, 
             "078500": 1.02, 
             "078600": 1.88, 
             "078700": 0.677, 
             "078900": 0.502, 
             "080100": 1.38, 
             "080200": 1.8, 
             "080300": 0.749, 
             "080400": 1.57, 
             "080500": 3.51, 
             "098900": 4.55
          }
       }
    ]
    Le truc c'est qu'à certains endroits (écrits en gras ci-dessus) lorsque la donnée de base est en KB et qu'elle est transformée par le code, la donnée réelle obtenue est soit 0.0 ou alors il y a même une puissance -5. Et ceci même en changement le nombre de chiffre après la virgule via l'utilisation de rounf(). Parce qu'à l'endroit où sont situé les valeurs en gras, il y a également d'autres valeurs qui de base étaient en KB et qui ce sont bien transformées tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
             "061500": 0.00029, 
             "061600": 0.00049,
             "062800": 0.00047, 
             "063200": 0.00024,

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Si vous demandez à round de garder 5 chiffres significatifs après la virgule, pour des valeurs "petites" (qui n'ont de chiffres significatifs qu'après la 6ème décimale), çà affichera, par défaut 0.0 ou une puissance de 10. Soit vous augmentez le nombre de chiffres significatifs, soit vous imposez 0.0 lorsque la valeur est plus petite que... (pour éviter l'affichage des puissance de 10), soit vous faites avec: c'est une représentation json correcte.

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

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

Discussions similaires

  1. Modifications d'un fichier JSON
    Par Xam29870 dans le forum Général Python
    Réponses: 3
    Dernier message: 04/01/2018, 11h46
  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