Написание словаря в текстовый файл?
У меня есть словарь, и я пытаюсь записать его в файл.
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
11 ответов
Прежде всего вы открываете файл в режиме чтения и пытаетесь в него записать. Consult - IO modes 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:
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()
Проблема с вашим первым блоком кода состояла в том, что вы открывали файл как 'r', даже если вы хотели записать его, используя 'w'
with open('/Users/your/path/foo','w') as data:
data.write(str(dictionary))
Если вам нужен словарь, который вы можете импортировать из файла по имени, а также который добавляет записи, которые хорошо отсортированы и содержат строки, которые вы хотите сохранить, вы можете попробовать это:
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
Для любителей понимания списка это напишет все key : value
пары в новых строках в 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 ]
Я знаю, что это старый вопрос, но я также решил поделиться решением, не включающим 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')
Я надеюсь, что это может помочь.
exDict = {1:1, 2:2, 3:3}
with open('file.txt', 'w+') as file:
file.write(str(exDict))
В моем случае мне нужно записать словарь в файл, но в формате YAML. Я нашел этот вопрос здесь полезным, но ответы были только в JSON или String. Поэтому я добавляю сюда свое исследование, чтобы оно могло помочь другим в формате YAML.
Надеюсь это поможет!
import json exDict = {1: 1, 2: 2, 3: 3} file.write (json.dumps (exDict))
https://developer.rhino3d.com/guides/rhinopython/python-xml-json/
import json
with open('tokenler.json', 'w') as file:
file.write(json.dumps(mydict, ensure_ascii=False))