nico
Tengo un diccionario y estoy tratando de escribirlo en un archivo.
exDict = {1:1, 2:2, 3:3}
with open('file.txt', 'r') as file:
file.write(exDict)
entonces tengo el error
file.write(exDict)
TypeError: must be str, not dict
Entonces arreglé ese error pero vino otro error
exDict = {111:111, 222:222}
with open('file.txt', 'r') as file:
file.write(str(exDict))
El error:
file.write(str(exDict))
io.UnsupportedOperation: not writable
¿Cómo resuelvo este problema?
hspandher
En primer lugar, está abriendo el archivo en modo de lectura e intentando escribir en él. Consultar – Modos IO python
En segundo lugar, solo puede escribir una cadena o bytes en un archivo. Si desea escribir un objeto de diccionario, debe convertirlo en una cadena o serializarlo.
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 caso de serialización
import cPickle as pickle
with open('file.txt', 'w') as file:
file.write(pickle.dumps(exDict)) # use `pickle.loads` to do the reverse
Para python 3.x, la importación del paquete pickle sería diferente
import _pickle as pickle
Lo hago así en python 3:
with open('myfile.txt', 'w') as f:
print(mydictionary, file=f)
sange negru
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()
-
Se desaconsejan las respuestas de solo código porque no explican cómo resuelven el problema. Actualice su respuesta para explicar cómo mejora esto en las otras respuestas aceptadas y votadas que ya tiene esta pregunta. Por favor revise ¿Cómo escribo una buena respuesta?
– Gatito esponjoso
10 de septiembre de 2017 a las 7:59
-
Además, debe utilizar el
with
declaración al leer y escribir en archivos: stackoverflow.com/questions/3012488/…– Falco
15 de enero de 2018 a las 17:58
clyde_the_frog
El problema con su primer bloque de código fue que estaba abriendo el archivo como ‘r’ a pesar de que quería escribir en él usando 'w'
with open('/Users/your/path/foo','w') as data:
data.write(str(dictionary))
Si desea un diccionario que puede importar desde un archivo por nombre, y también que agrega entradas que están bien ordenadas y contiene cadenas que desea conservar, puede probar esto:
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("}")
Luego para importar:
from file import dictionary_name
davidel
Para los amantes de la comprensión de listas, esto escribirá todas las key : value
pares en nuevas líneas en dog.txt
my_dict = {'foo': [1,2], 'bar':[3,4]}
# create list of strings
list_of_strings = [ f'{key} : {my_dict[key]}' for key in my_dict ]
# write string one by one adding newline
with open('dog.txt', 'w') as my_file:
[ my_file.write(f'{st}\n') for st in list_of_strings ]
Ángel
Sé que esta es una vieja pregunta, pero también pensé en compartir una solución que no involucre a json. Personalmente, no me gusta json porque no permite agregar datos fácilmente. Si su punto de partida es un diccionario, primero puede convertirlo en un marco de datos y luego agregarlo a su archivo 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")
Espero que esto pueda ayudar.