¿Escribir un diccionario en un archivo de texto?

3 minutos de lectura

Avatar de usuario de Nic
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?

avatar de usuario de hspandher
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)

Avatar de usuario de Sange Negru
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

avatar de usuario de clyde_the_frog
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

Avatar de usuario de DavideL
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 ]

Avatar de usuario de Angelo
Á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.

¿Ha sido útil esta solución?