2016-05-01 16 views
11

Mam słownik i próbuję zapisać go do pliku.Zapisywanie słownika do pliku tekstowego w pythonie

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

Mam następnie błąd

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

więc naprawiłem ten błąd, ale kolejny błąd przyszedł

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

błędu:

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

nie mam pojęcia, co do zrobienia, ponieważ wciąż jestem początkującym w Pythonie. Jeśli ktoś wie, jak rozwiązać problem, proszę podać odpowiedź.

UWAGA: Używam Pythona 3, nie python 2

Dzięki

Odpowiedz

21

Przede wszystkim otwieramy plik w trybie odczytu i próbuje pisać do niego. Consult - IO modes python

Po drugie, można napisać ciąg do pliku. Jeśli chcesz napisać obiekt słownika, musisz go przekonwertować na ciąg lub przekształcić do postaci szeregowej.

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 

W przypadku serializacji

import cPickle as pickle 

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

To działało! Chociaż zapisuje tylko zawartość słownika. Czy możesz napisać: exDict = {111: 111, 222: 222} – Nic

+0

Pomyślałem o tym, ale myślałem, że jest lepszy sposób. Działa, ale dziękuję! – Nic

+0

Jeśli nie jesteś zbytnio związany ze znakiem '=', edytowana przeze mnie edycja może wykonać to zadanie. – hspandher

1

Zmień

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

do

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

Jesteś otwarcie pliku w trybie r (EDO), a nie w (ryt).

+0

Mam wtedy błąd: plik.write (open (exDict)) TypeError: niepoprawny plik: {222: 222, 111: 111} – Nic

+0

dzieje się tak, gdy wywołasz 'with open (exDict, 'w') jako plik:' –

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

Odpowiedzi tylko na kod są zniechęcane ponieważ nie wyjaśniają, w jaki sposób rozwiązują problem. Zaktualizuj swoją odpowiedź, aby wyjaśnić, jak to się poprawia w przypadku innych zaakceptowanych i wznowionych odpowiedzi, które już zostały zadane. Zapoznaj się z [Jak napisać dobrą odpowiedź] (https://stackoverflow.com/help/how-to-answer). – FluffyKitten

+0

Powinieneś także użyć instrukcji 'with' podczas czytania i zapisywania do plików: https://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for – Falko