0
votes

Python json.update

J'ai un dictionnaire:

{}
{
  "1": null,
  "2": null,
  "3": null,
  "4": null,
  "5": null,
  "6": null,
  "7": null,
  "8": null,
  "9": null,
  "10": null
}

Chaque fois que j'essaye de mettre à jour le fichier avec:

with open('test.json', 'w+') as f:
    data = json.load(f)
    data.update(dict)
    json.dump(data, f, indent=2)

Le fichier de sortie ressemble à ceci:

dict = {'1': None, '2': None, '3': None, '4': None, '5': None, '6': None, '7': None, '8': None, '9': None, '10': None}

Comment puis-je mettre le dictionnaire entre les premières accolades? (mon fichier json initial ressemble à ceci {}


0 commentaires

3 Réponses :


0
votes

J'ai essayé d'exécuter votre code mais le programme a rencontré une erreur à la ligne data = json.load (f) car vous venez d'ouvrir le fichier à écrire. Si vous ouvrez le fichier pour écrire, le fichier sera effacé. Vous devez d'abord ouvrir le fichier pour lire et charger json, puis ouvrir le fichier pour écrire et vider json. Je vous recommande également de ne pas utiliser le travail de clavier pour nommer une variable car cela causera de sérieux bogues.


1 commentaires

Je l'ai changé en avec open ('test.json', 'w +') comme f:



0
votes

Ouvrez le fichier ==> Apportez des modifications ==> Enregistrez le fichier

import json

dict = {'1': None, '2': None, '3': None, '4': None, '5': None, '6': None, '7': None, '8': None, '9': None, '10': None}
with open('test.json', 'r') as f:
    data = json.load(f)

#  Do something with the data
dict['1'] = 100

with open('test.json', 'wt') as f:
    data.update(dict)
    json.dump(data, f, indent=2)


3 commentaires

n'est-ce pas la même chose que BF?


Observez le «w» dans open (). Le fichier a été ouvert pour être écrit pendant que la première instruction json.load (f) lit le fichier.


la seule différence est le wt en open, qui, je ne pense pas, fait quelque chose de différent. Cela fonctionnerait cependant, c'est une très longue façon de le faire quand il pourrait être compressé en seulement 5 lignes.



0
votes

J'ai déjà rencontré cette erreur, ce qui a fonctionné pour moi est d'utiliser seek (0) avant d'écrire dans le fichier. Comme ceci:

with open('test.json', 'w+') as f:
    data = json.load(f)
    data.update(dict)
    f.seek(0)
    json.dump(data, f, indent=4)

json.load lit le fichier entièrement et place la position du fichier à la fin du fichier. C'est pourquoi json.dump écrit à la fin du fichier, la position du fichier est à la fin et json.dump le récupère à partir de là, et écrit jusqu'à la fin du fichier.


1 commentaires

Ma réponse n'a-t-elle pas fonctionné?