2013-06-18 60 views
2

我對python有點新鮮,我正在製作一個用戶名+密碼登錄系統以獲得樂趣。我正在使用字典來存儲用戶名和密碼。我打算讓它可以添加一個帳戶到字典中,並且我希望有一種方法可以在程序下次運行時保存字典。我將如何做到這一點?Python - 在程序外部保存數據

+1

我不會存儲明文密碼。哈希它們。 – Blender

+0

請確保在存儲任何密碼或加密密碼或散列密碼之前閱讀此內容:http://stackoverflow.com/a/401684/212555 –

回答

4

有用於保存數據許多選項,一個簡單的方法是使用shelve

可以使用保存數據:

>>> import shelve 
>>> data = {'foo':'foo value'} 
>>> d = shelve.open('myfile.db') 
>>> d['data'] = data 
>>> d.close() 

然後你就可以很容易地恢復你的數據:

>>> import shelve 
>>> d = shelve.open('myfile.db') 
>>> data = d['data'] 
>>> d.close() 

其他選項使用filesCPickle數據庫,如SQLite,MySQL等

+0

這是最好的答案。如果您需要基本的東西,請使用擱架。如果你需要更大的東西,看看RDBMSes(SQL)。 – ducin

+0

@tkoomzaaskz:如果你需要更基本的東西,所有的值都是字符串,就像在OP的例子中一樣,你不應該使用'shelve';只需使用'dbm' /'anydbm'。沒有理由花費酸洗和取消每個值字符串的代價,或者使用普通的dbm工具使數據庫文件無法讀取,這時您可以直接存儲字符串。 – abarnert

-1

瞭解如何在python中讀寫Files,並將用戶名和密碼存儲在文本文件中。

+1

加密密碼是一個壞主意。如果你需要任何安全性,你應該對它們進行哈希處理,而不是將它們存儲起來。如果你不需要任何安全性,你只會讓事情變得更加複雜,並提供虛假的安全感。 – abarnert

+0

純文件是一個壞主意。使用pickle/dbm/shelve。 – ducin

+2

他確實表示他在做'爲了好玩'。我不認爲他很在乎密碼的安全性。 –

0

有很多選擇。您可以從瞭解本機Python的input and output的工作原理開始。

然後你可以試試sqlite

最後使用適當的數據庫(MySQL,PostgreSQL,MongoDB等)。

2

根據您的需要,您可以將信息保存到文本文件或使用數據庫。保存到文本文件不需要任何編碼,但是Python的兩種流行格式/庫是jsonpickle。如果你想使用數據庫,我會建議看一下mysql或sqlite。

0

jabaldonedo建議的shelve模塊是詞典的替代替代品。但是,當你的值都是字符串時,即使是shelve也是矯枉過正;你可以使用dbm

無論哪種方式,你只需要改變一個行:

d = {} # in-memory, non-persistent dict 
d = shelve.open('passwd.db', 'c') # persistent dict that can store anything 
d = dbm.open('passwd.db', 'c') # persistent dict that only stores strings 

DBM的好處是,你可以使用其他工具來讀取(和編輯)數據庫。例如,如果你這樣做:

d['abc'] = 'def' 

隨着dbm,該數據庫將持有該字符串'def'。與shelve,它將持有像'\x80\x03X\x03\x00\x00\x00defq\x00.'

+0

誰低估,謹慎解釋爲什麼? – abarnert

+0

鄧諾誰downvoted。我剛剛贊成它,所以現在你已經有零;)我支持使用內置模塊。 – ducin