web-dev-qa-db-fra.com

Écrire un dictionnaire dans un fichier texte?

J'ai un dictionnaire et j'essaie de l'écrire dans un fichier.

exDict = {1:1, 2:2, 3:3}
with open('file.txt', 'r') as file:
    file.write(exDict)

J'ai alors l'erreur

file.write(exDict)
TypeError: must be str, not dict

J'ai donc corrigé cette erreur, mais une autre erreur est arrivée

exDict = {111:111, 222:222}
with open('file.txt', 'r') as file:
    file.write(str(exDict))

L'erreur:

file.write(str(exDict))
io.UnsupportedOperation: not writable

Je n'ai aucune idée de ce qu'il faut faire car je suis toujours débutant chez Python. Si quelqu'un sait comment résoudre le problème, veuillez fournir une réponse.

NOTE: J'utilise python 3, pas python 2

51
Nic

Tout d’abord, vous ouvrez un fichier en mode lecture et vous essayez d’y écrire. Consulter - modes python IO

Deuxièmement, vous pouvez uniquement écrire une chaîne dans un fichier. Si vous voulez écrire un objet dictionnaire, vous devez soit le convertir en chaîne, soit le sérialiser.

import json

# as requested in comment
exDict = {'exDict': exDict}

with open('file.txt', 'w') as file:
     file.write(json.dumps(exDict)) # use `json.loads` to do the reverse

En cas de sérialisation

import cPickle as pickle

with open('file.txt', 'w') as file:
     file.write(pickle.dumps(exDict)) # use `pickle.loads` to do the reverse

Pour python _ 3.x, l’importation du paquet de pickle serait différente

import _pickle as pickle
83
hspandher

Je le fais comme ça en python 3:

with open('myfile.txt', 'w') as f:
    print(mydictionary, file=f)
18
NKSHELL
fout = "/your/outfile/here.txt"
fo = open(fout, "w")

for k, v in yourDictionary.items():
    fo.write(str(k) + ' >>> '+ str(v) + '\n\n')

fo.close()
17
Sange Negru

Le problème avec votre premier bloc de code était que vous ouvriez le fichier en tant que "r", même si vous vouliez l'écrire en utilisant 'w'

with open('/Users/your/path/foo','w') as data:
    data.write(str(dictionary))
10
clyde_the_frog

Si vous voulez un dictionnaire que vous pouvez importer à partir d'un fichier par son nom, et qui ajoute également des entrées bien triées et contenant des chaînes que vous souhaitez conserver, vous pouvez essayer ceci:

data = {'A': 'a', 'B': 'b', }

with open('file.py','w') as file:
    file.write("dictionary_name = { \n")
    for k in sorted (data.keys()):
        file.write("'%s':'%s', \n" % (k, data[k]))
    file.write("}")

Puis importer:

from file import dictionary_name
2
Mark Matthews

Je sais que c’est une vieille question, mais j’ai aussi pensé à partager une solution qui n’impliquait pas JSON. Personnellement, je n'aime pas trop JSON car cela ne permet pas d'ajouter facilement des données. Si votre point de départ est un dictionnaire, vous pouvez d'abord le convertir en une structure de données, puis l'ajouter à votre fichier txt:

import pandas as pd
one_line_dict = exDict = {1:1, 2:2, 3:3}
df = pd.DataFrame.from_dict([one_line_dict])
df.to_csv('file.txt', header=False, index=True, mode='a')

J'espère que cela pourrait aider.

0
Angelo

importer json exDict = {1: 1, 2: 2, 3: 3} fichier.write (json.dumps (exDict))

https://developer.rhino3d.com/guides/rhinopython/python-xml-json/

0
Shivam Verma