2013-08-31 115 views
2

我看過其他問題就像這樣,但他們太科技讓我明白(只是學習了幾天)。 我想提出一個電話簿,我試圖挽救像這樣一本字典,python 3保存字典

numbers = {} 
def save(a): 
    x = open("phonebook.txt", "w") 
    for l in a: 
     x.write(l, a[l]) 
    x.close() 

,但我得到錯誤的write()只需要1個參數和OBV IM傳遞2,所以我的問題是我怎麼能做到這一點以一種初學者的方式,你可以用非技術性的方式來描述它。 非常感謝。

+0

你期望什麼輸出格式? – badc0re

+0

@SrinivasReddyThatiparthy你應該刪除該評論;可怕的建議。 – blakev

+0

初學者友好:)但足夠公平 –

回答

4

這是更好地使用json模塊從文件轉儲/加載字典/:

>>> import json 
>>> numbers = {'1': 2, '3': 4, '5': 6} 
>>> with open('numbers.txt', 'w') as f: 
...  json.dump(numbers, f) 
>>> with open('numbers.txt', 'r') as f: 
...  print json.load(f) 
... 
{u'1': 2, u'3': 4, u'5': 6} 
+0

感謝您的回答,但您能否解釋'with'和'as f'。我認爲.dump是.write和.load是.read – StandingBird

+0

@PaulRice肯定,[with](http://docs.python.org/2/reference/compound_stmts.html#the-with-statement)是一個上下文管理器,代替try的快捷方式:except:finally:'樣板代碼。 'dump'是寫入,'load'是讀取的,對。 – alecxe

+0

好的很好的幫助。謝謝..最後一件事我該如何關閉它或不需要 – StandingBird

0

您需要使用json模塊和JSONEncode您的字典,然後您可以使用該模塊將新對象寫入文件。

當您閱讀該文件時,您需要JSONDecode將其轉換回python字典。

>>> import json 
>>> d = {1:1, 2:2, 3:3} 
>>> d 
{1: 1, 2: 2, 3: 3} 
>>> json.JSONEncoder().encode(d) 
'{"1": 1, "2": 2, "3": 3}' 
>>> with open('phonebook.txt', 'w') as f: 
    f.write(json.JSONEncoder().encode(d)) 

>>> with open('phonebook.txt', 'r') as f: 
    print f.readlines() 

['{"1": 1, "2": 2, "3": 3}'] 
+0

使用'json.dump()'和'json.load()'函數通常更簡單。像'json.dump(d,f)'寫,'json.load(f)'讀。 – cellofellow

3

雖然JSON是一個不錯的選擇,是跨語言,並通過瀏覽器的支持,Python有其自己的序列化格式稱爲pickle,它更加靈活。

import pickle 

data = {'Spam': 10, 'Eggs': 5, 'Bacon': 11} 

with open('/tmp/data.pickle', 'w') as pfile: 
    pickle.dump(data, pfile) 

with open('/tmp/data.pickle', 'r') as pfile: 
    read_data = pickle.load(pfile) 

print(read_data) 

味酸是Python特定的,不與其他語言的工作,並注意不要在加載來自不受信任來源泡菜數據(例如通過網絡),因爲它不會被視爲「安全」。

Pickle也適用於其他數據類型,包括您自己的類的實例。