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
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
Je le fais comme ça en python 3:
with open('myfile.txt', 'w') as f:
print(mydictionary, file=f)
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()
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))
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
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.
importer json exDict = {1: 1, 2: 2, 3: 3} fichier.write (json.dumps (exDict))
https://developer.rhino3d.com/guides/rhinopython/python-xml-json/