1619 votes

Comment écrire des données JSON dans un fichier ?

Comment écrire des données JSON stockées dans le dictionnaire ? data dans un fichier ?

f = open('data.json', 'wb')
f.write(data)

Cela donne l'erreur :

TypeError : doit être une chaîne de caractères ou un tampon, pas un dict.

0 votes

Pour les drapeaux lors de l'ouverture du fichier : Ici, nous avons utilisé la lettre "w" dans notre argument, qui indique l'écriture et créera un fichier s'il n'existe pas dans la bibliothèque Le signe plus indique à la fois la lecture et l'écriture, guru99.com/lire-et-ecrire-des-fichiers-en-python.html#1

14voto

irwebuniq Points 41

Écriture de JSON dans un fichier

import json

data = {}
data['people'] = []
data['people'].append({
    'name': 'Scott',
    'website': 'stackabuse.com',
    'from': 'Nebraska'
})
data['people'].append({
    'name': 'Larry',
    'website': 'google.com',
    'from': 'Michigan'
})
data['people'].append({
    'name': 'Tim',
    'website': 'apple.com',
    'from': 'Alabama'
})

with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

Lecture de JSON à partir d'un fichier

import json

with open('data.txt') as json_file:
    data = json.load(json_file)
    for p in data['people']:
        print('Name: ' + p['name'])
        print('Website: ' + p['website'])
        print('From: ' + p['from'])
        print('')

3 votes

Bienvenue sur Stack Overflow. Si vous décidez de répondre à une question plus ancienne dont les réponses sont bien établies et correctes, l'ajout d'une nouvelle réponse en fin de journée peut ne vous apporter aucun crédit. Si vous disposez d'informations nouvelles et pertinentes, ou si vous êtes convaincu que les autres réponses sont toutes fausses, vous pouvez ajouter une nouvelle réponse, mais une "énième réponse" donnant les mêmes informations de base longtemps après que la question a été posée ne vous donnera généralement pas beaucoup de crédit. (Vous montrez quelques échantillons de données ; c'est bien, mais je ne suis pas sûr que ce soit suffisant, d'autant plus que vous ne montrez pas ce qui est produit pour les échantillons de données).

1 votes

Je pense que la réponse est bonne car elle contient plus de détails et de clarté.

13voto

ibic Points 470

Je n'ai pas assez de réputation pour ajouter dans les commentaires, donc je me contente d'écrire ici quelques-unes de mes découvertes de cette ennuyeuse TypeError :

En fait, je pense qu'il s'agit d'un bug dans l'application json.dump() en Python 2 seulement - Il ne peut pas vider une donnée Python (dictionnaire / liste) contenant des caractères non-ASCII, même vous ouvrez le fichier avec le encoding = 'utf-8' paramètre. (c'est-à-dire quoi que vous fassiez). Mais, json.dumps() fonctionne à la fois sur Python 2 et 3.

Pour illustrer ceci, suite à la réponse de phihag : le code dans sa réponse se casse dans Python 2 avec une exception TypeError: must be unicode, not str si data contient des caractères non ASCII. (Python 2.7.6, Debian) :

import json
data = {u'\u0430\u0431\u0432\u0433\u0434': 1} #{u'': 1}
with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

Il fonctionne cependant très bien dans Python 3.

0 votes

Donnez des raisons lorsque vous affirmez que quelque chose est faux. Utilisez @nickname pour que la personne soit avertie. Vous ne pouvez pas écrire de commentaires, mais vous pouvez en lire. Comme je l'ai déjà indiqué dans ma réponse au premier commentaire, essayez de data = {'asdf': 1} . Vous obtiendrez la fameuse TypeError avec votre (deuxième) variante.

0 votes

Concernant ensure_ascii - il est nécessaire si vous voulez obtenir une "vraie" sortie utf8. Sans lui, vous aurez un ascii simple avec 6 octets par lettre russe, contre 2 octets par caractère avec ce drapeau.

0 votes

@AntonyHatchkins Vous avez raison pour le unicode() partie. Je viens de réaliser que pour io dans Python 2, write() besoins unicode pas str .

11voto

Vishal Gediya Points 167

Ecrire une donnée dans un fichier en utilisant JSON json.dump() o json.dumps() utilisé. écrire comme ceci pour stocker des données dans un fichier.

import json
data = [1,2,3,4,5]
with open('no.txt', 'w') as txtfile:
    json.dump(data, txtfile)

cet exemple dans la liste est stocké dans un fichier.

0 votes

C'est similaire mais avec un exemple

7voto

Alexander Points 49390
json.dump(data, open('data.txt', 'wb'))

3 votes

Cela fait la même chose que la réponse de @phihag, mais il n'est pas garanti que cela fonctionne à tout moment. Considérez un tel code : f = open('1.txt', 'w'); f.write('a'); input() . Exécutez-le et ensuite SYGTERM le ( Ctrl-Z puis kill %1 sur linux, Ctrl-Break sur Windows). 1.txt aura 0 octet. C'est parce que l'écriture a été mise en mémoire tampon et que le fichier n'a été ni vidé ni fermé au moment où le SYGTERM s'est produit. with garantit que le fichier sera toujours fermé, comme le fait le bloc 'try/finally', mais en plus court.

6voto

James Wierzba Points 5885

Pour écrire le JSON avec indentation, "pretty print" :

import json

outfile = open('data.json')
json.dump(data, outfile, indent=4)

De plus, si vous devez déboguer un JSON mal formaté et que vous souhaitez obtenir un message d'erreur utile, utilisez la fonction import simplejson au lieu de import json (les fonctions doivent être les mêmes)

0 votes

Non. open('data.json') ouvrir le fichier en mode lecture seule ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X