2016-05-01 23 views
11

Ho un dizionario e sto provando a scriverlo in un file.Scrivere un dizionario in un file di testo in python

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

Ho poi l'errore

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

Così ho fissato che l'errore, ma un altro errore venuto

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

L'errore:

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

Non ho idea di che cosa fare come sono ancora un principiante in Python. Se qualcuno sa come risolvere il problema, si prega di fornire una risposta.

NOTA: Sto usando Python 3, non Python 2

Grazie

risposta

21

Prima di tutto si sta aprendo il file in modalità di lettura e cercando di scrivere in esso. Consult - IO modes python

In secondo luogo, è possibile solo scrivere una stringa in un file. Se si desidera scrivere un oggetto dizionario, è necessario convertirlo in stringa o serializzarlo.

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 

In caso di serializzazione

import cPickle as pickle 

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

Ha funzionato! Sebbene, scrive solo il contenuto del dizionario. Puoi scriverlo: exDict = {111: 111, 222: 222} – Nic

+0

Ci ho pensato, ma ho pensato che c'era un modo migliore. Funziona comunque così grazie! – Nic

+0

Se non si è troppo attaccati con il segno '=', la modifica apportata potrebbe svolgere il lavoro. – hspandher

1

Change

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

a

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

Si sta aprendo il file in modalità lettura (R) e non w (rite) modalità.

+0

Ho quindi l'errore: file.write (open (exDict)) TypeError: file non valido: {222: 222, 111: 111} – Nic

+0

questo accade quando si chiama 'con open (exDict, 'w') come file:' –

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

Le risposte solo in codice sono scoraggiate perché non spiegano come risolvono il problema. Si prega di aggiornare la risposta per spiegare come questo migliora le altre risposte accettate e potenziate che questa domanda ha già. Si prega di rivedere [Come scrivere una buona risposta] (https://stackoverflow.com/help/how-to-answer). – FluffyKitten

+0

Inoltre, dovresti usare l'istruzione 'with' durante la lettura e la scrittura sui file: https://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for – Falko