Написание словаря в текстовый файл?

У меня есть словарь, и я пытаюсь записать его в файл.

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

У меня тогда ошибка

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

Я исправил эту ошибку, но пришла другая ошибка

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

Ошибка:

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

Я понятия не имею, что делать, так как я все еще новичок в Python. Если кто-нибудь знает, как решить проблему, пожалуйста, предоставьте ответ.

ПРИМЕЧАНИЕ: я использую Python 3, а не Python 2

Ответ 1

Прежде всего вы открываете файл в режиме чтения и пытаетесь в него записать. Проконсультируйтесь - IO Mode Python

Во-вторых, вы можете записать только строку в файл. Если вы хотите написать объект словаря, вам нужно либо преобразовать его в строку, либо сериализовать его.

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

В случае сериализации

import cPickle as pickle

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

Импорт пакетов рассылки Python 3.x будет другим

import _pickle as pickle

Ответ 2

Я делаю это так в Python 3:

with open('myfile.txt', 'w') as f:
    print(mydictionary, file=f)

Ответ 3

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()

Ответ 4

Проблема с вашим первым блоком кода заключалась в том, что вы открывали файл как "r", даже если вы хотели записать в него, используя 'w'

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

Ответ 5

Если вам нужен словарь, который вы можете импортировать из файла по имени, а также который добавляет записи, которые хорошо отсортированы и содержат строки, которые вы хотите сохранить, вы можете попробовать это:

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("}")

Затем импортировать:

from file import dictionary_name

Ответ 6

Измените

with `open('file.txt', 'r') as file:`

to

with open('file.txt', 'w') as file:

Вы открываете файл в режиме r (ead), а не w (rite).

Ответ 7

Я знаю, что это старый вопрос, но я также решил поделиться решением, не включающим JSON. Лично мне не очень нравится JSON, потому что он не позволяет легко добавлять данные. Если вашей отправной точкой является словарь, вы можете сначала преобразовать его в кадр данных, а затем добавить его в свой текстовый файл:

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')

Я надеюсь, что это может помочь.

Ответ 9

import json

with open('tokenler.json', 'w') as file:
     file.write(json.dumps(mydict, ensure_ascii=False))