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 :

Ajout de données dans un .json [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2021
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Ajout de données dans un .json
    Bonjour, je me suis récemment voulu faire un programme de todolist avec comme bdd un .json

    Je suis assez novice dans le domaine et je butte sur un problème: je ne sais pas comment "créer" une nouvelle ligne dans le fichier sans tout modifier

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sansliste = {
    	"1" : {
     
    	"titre" : "titretext",
    	"description" : "descriptiontext"
     
    	}
     
     
    }
    Le truc que j'éssaye de faire est de rajouté un un "2" est tout ce qui en découle (titre + description)

    J'ai cherché pas mal de temps et jamais je n'ai trouvé quelque chose qui résout mon problème.

    Merci d'avance pour votre aide

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

    Un fichier JSON est un fichier texte.

    On ne sait pas ajouter une ligne à un fichier texte sans le ré-écrire complètement (sauf si on ajoute une ligne à la fin mais ce ne sera plus du JSON).

    Mais vous pouvez utiliser une base de données un peu plus conventionnelle comme sqlite3 (c'est plus un fichier texte mais on sait ajouter des lignes à une table).

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2021
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Un fichier JSON est un fichier texte.

    On ne sait pas ajouter une ligne à un fichier texte sans le ré-écrire complètement (sauf si on ajoute une ligne à la fin mais ce ne sera plus du JSON).

    Mais vous pouvez utiliser une base de données un peu plus conventionnelle comme sqlite3 (c'est plus un fichier texte mais on sait ajouter des lignes à une table).

    - W
    D'accord, merci

  4. #4
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Si votre json représente une liste, alors il se termine par ']'. Pour ajouter un élément à cette liste vous pouvez juste placer le curseur d'écriture juste avant ce crochet final, y placer une virgule, puis votre nouvel élément, et enfin refermez l'objet parent en remettant bien le crochet fermant.

    Sinon si votre fichier n'est pas trop gros (ce qui devrait etre le cas si c'est une todo list), et bien pour ajouter un item à un fichier json et bien vous l'importer dans python, vous ajouter ce qu'il vous faut à la structure python, et vous réécrivez l'ensemble.

  5. #5
    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,

    De quoi parles-tu ? Editer directement le .json ou le modifier dans un code Python ?

    Dans le premier cas c'est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sansliste = {
    	"1" : {
    	    "titre": "titretext",
    	    "description": "descriptiontext"
    	},
            "2": {
                "titre": "titretext",
    	    "description": "descriptiontext"
    	}
    }
    Dans le deuxième tu fais comme avec un dictionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with open("file.jsn", 'r') as objfile:
        data = json.loads(objfile.read())
     
    data["2"] = {"titre": "titretext", "description": "descriptiontext"}
     
    jsn = json.dumps(data, sort_keys=True, indent=4, 
                     separators=(',', ': '), ensure_ascii=False)
    with open("file.jsn", 'wb') as outfile:
        outfile.write(jsn.encode('utf-8', 'replace'))

  6. #6
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Oui voilà, là tu lis tout, update, puis réécris tout. Mais si ton json est lourd, tu vas payer ce type d'opération très chère pour juste une petite insertion d'un item ! Et dans ces cas là, on peut faire qqch comme ca (qu'on peut aisément adapté si notre json est un dico plutot qu'une liste) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def append_to_json_list(dico,path, **kwargs):
        ### cf : https://stackoverflow.com/a/44599922
        with open(path, 'ab+') as f:
            # a+ : open the file in read and write mode. "a" place the cursor to the end of file 
            # Open file in binary mode is mandatory (elsewhere we cannot make seek with negative index)
            if f.tell() == 0 :       #Check if file is empty
                f.write(b'[\n')
            else :
                f.seek(-2,2)
                f.truncate()
                f.write(b',\n')
            f.write(json.dumps(dico, **kwargs).encode())
            f.write(b'\n]')

  7. #7
    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
    Hem, ce code ne fait que rajouter quelque chose à la fin d'une liste, l'équivalent d'un append.

    La question initiale porte sur un dictionnaire de dictionnaire.

    Pour la question de taille je ne vois pas de problème, mon application Qarte utilise un .json de 3.500 lignes contenant un mélange de dictionnaires et de listes définissant quelque 500 concerts et ce fichier est chargé instantanément.

  8. #8
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Tout en restant sous l'approache de "bases de données" : comme stockage de documents en forme de json d'abord et puis sous-entendu l'efficacité des opérations acid qui vienent avec, on a la disposition de variants de nosql lite (light-weight) comme UnQLite par exemple si ça vous apporte quelque élément en plus sur le sujet. (https://unqlite.org/)

  9. #9
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Hem, ce code ne fait que rajouter quelque chose à la fin d'une liste, l'équivalent d'un append.

    La question initiale porte sur un dictionnaire de dictionnaire.

    Pour la question de taille je ne vois pas de problème, mon application Qarte utilise un .json de 3.500 lignes contenant un mélange de dictionnaires et de listes définissant quelque 500 concerts et ce fichier est chargé instantanément.
    Euh 3500 lignes c'est pas ce que j'appelle un gros fichier ... Un truc comme ca doit faire dans les 10 Ko (on peut monter à 100 K si ton json est vraiment très compact avec des lignes à rallonge, mais bon). Un gros fichier c'est un truc bien gras quoi, qui fait grand mini 10 Mo sur ton disque ! Pardon, mais 3500 lignes c'est de la rigolade.


    Et effectivement le code que j'ai proposé est pour une liste comme je l'ai mentionné, mais il est facile de l'adapté à un dictionnaire. C'était surtout pour illustrer comment on peut faire sans devoir recharger la totalité du fichier et le réécrire entièrement.

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

Discussions similaires

  1. [UI Mobile] Ajouter des données dans un Fichier JSON
    Par van-bom dans le forum jQuery
    Réponses: 7
    Dernier message: 31/01/2014, 16h50
  2. Réponses: 9
    Dernier message: 01/06/2006, 12h25
  3. evenement à l'ajout de données dans un select
    Par mohican13 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 15h10
  4. Réponses: 8
    Dernier message: 24/02/2006, 09h59
  5. ajouter des données dans une requête htttp en js
    Par jeromejanson dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2005, 15h34

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