2016-05-01 19 views
11

Ich habe ein Wörterbuch und versuche, es in eine Datei zu schreiben.Schreiben eines Wörterbuchs in eine Textdatei in Python

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

Ich habe dann den Fehler

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

Also habe ich diesen Fehler behoben, aber ein weiterer Fehler kam

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

Der Fehler:

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

Ich habe keine Ahnung, was zu tun, da ich noch ein Anfänger bei Python bin. Wenn jemand weiß, wie das Problem gelöst werden kann, geben Sie bitte eine Antwort an.

HINWEIS: Ich verwende Python 3, Python nicht 2

Dank

Antwort

21

allererst Sie Datei im Lesemodus öffnen und zu versuchen, in sie zu schreiben. Consult - IO modes python

Zweitens können Sie nur eine Zeichenfolge in eine Datei schreiben. Wenn Sie ein Wörterbuchobjekt schreiben möchten, müssen Sie es entweder in eine Zeichenfolge konvertieren oder es serialisieren.

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 

Bei Serialisierung

import cPickle as pickle 

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

Das hat funktioniert! Es schreibt jedoch nur den Inhalt des Wörterbuchs. Kannst du es schreiben: exDict = {111: 111, 222: 222} – Nic

+0

Ich dachte daran, dachte aber, es gäbe einen besseren Weg. Es funktioniert, aber danke! – Nic

+0

Wenn Sie nicht zu sehr mit einem '=' Zeichen verbunden sind, könnte die Bearbeitung, die ich gemacht habe, die Aufgabe erledigen. – hspandher

1

ändern

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

zu

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

Sie öffnen, die Datei in r (ead) Modus und nicht w (rite) Modus.

+0

Ich habe dann den Fehler: Datei.write (open (exDict)) TypeError: Ungültige Datei: {222: 222, 111: 111} – Nic

+0

Das passiert, wenn Sie 'mit open (exDict, 'w') als Datei aufrufen:' –

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

Code-only Antworten werden nicht empfohlen weil sie nicht erklären, wie sie das Problem lösen. Bitte aktualisieren Sie Ihre Antwort, um zu erklären, wie sich dies bei den anderen akzeptierten und aufgewerteten Antworten, die diese Frage bereits enthält, verbessert. Bitte lesen Sie [Wie schreibe ich eine gute Antwort] (https://stackoverflow.com/help/how-to-answer). – FluffyKitten

+0

Sie sollten auch die Anweisung 'with' verwenden, wenn Sie Dateien lesen und in diese schreiben: https://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for – Falko