Tenho um dicionário e estou tentando escrevê-lo em um arquivo.
exDict = {1:1, 2:2, 3:3}
with open('file.txt', 'r') as file:
file.write(exDict)
Então eu tenho o erro
file.write(exDict)
TypeError: must be str, not dict
Corrigi esse erro, mas veio outro erro
exDict = {111:111, 222:222}
with open('file.txt', 'r') as file:
file.write(str(exDict))
O erro:
file.write(str(exDict))
io.UnsupportedOperation: not writable
Não tenho ideia do que fazer, pois ainda sou um iniciante em python. Se alguém souber como resolver o problema, forneça uma resposta.
NOTA: Estou usando o python 3, não o python 2
=
sinal, a edição que fiz pode dar conta do recado.str(exDict)
que produziria nem sempre será um JSON válido. Pensando bem, um motivo é que as aspas simples não são válidas em um arquivo JSON, embora possam estar presentes quando usamos ostr
método.Eu faço assim no python 3:
with open('myfile.txt', 'w') as f: print(mydictionary, file=f)
fonte
str(mydict)
em um arquivo é precisamente porque você não precisaeval
do conteúdo para obter odict
objeto de volta.eval
é uma lista de segurança e não deve ser usada se houver opções melhores disponíveis.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()
fonte
with
instrução ao ler e gravar em arquivos: stackoverflow.com/questions/3012488/…O problema com o seu primeiro bloco de código era que você estava abrindo o arquivo como 'r', embora quisesse escrever nele usando
'w'
with open('/Users/your/path/foo','w') as data: data.write(str(dictionary))
fonte
Se você quiser um dicionário, pode importar de um arquivo por nome e também adicionar entradas bem classificadas e conter strings que deseja preservar, você pode tentar isto:
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("}")
Em seguida, para importar:
from file import dictionary_name
fonte
Para os amantes da compreensão de listas, isso escreverá todos os
key : value
pares em novas linhas emdog.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 ]
fonte
Sei que essa é uma questão antiga, mas também pensei em compartilhar uma solução que não envolvesse JSON. Eu pessoalmente não gosto de json porque ele não permite anexar dados facilmente. Se o seu ponto de partida for um dicionário, você pode primeiro convertê-lo em um dataframe e depois anexá-lo ao seu arquivo 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 isso possa ajudar.
fonte
exDict = {1:1, 2:2, 3:3} with open('file.txt', 'w+') as file: file.write(str(exDict))
fonte
Você pode fazer o seguinte:
import json exDict = {1:1, 2:2, 3:3} file.write(json.dumps(exDict))
https://developer.rhino3d.com/guides/rhinopython/python-xml-json/
fonte
import json with open('tokenler.json', 'w') as file: file.write(json.dumps(mydict, ensure_ascii=False))
fonte