在计算机上永久存储用户接受的数据

时间:2015-05-18 10:58:08

标签: python store

我有一个基本的登录程序,它接受用户的用户名和相应的密码。我发现即使我们将数据附加到列表或添加到字典中,它也会在我们关闭程序后立即被删除。我想要的是一种以更永久的方式存储这些数据的方法,以便在我重新启动程序时可以再次访问它。

我尝试将文本文件用作永久存储空间,但程序经常会抛出错误。我希望有一种更有效,更强大的方法来存储数据。

欢迎任何建议,但如果他们使用标准模块,我会更喜欢,如果要使用模块的话。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用pickle(https://docs.python.org/2/library/pickle.html)。它将保存您的列表或字典。

否则以csv格式保存它总是一个很好的解决方案。

答案 1 :(得分:0)

您可以尝试shelve,这本质上是一个关键的泡菜。这有一些优点,特别是你不需要读整套(虽然我们不知道你打算存储多少)。以下是Python 2的示例:

首先创建你的货架,例如:

import shelve

db = shelve.open('passwd')

db['user1'] = 'password'
db['user2'] = 'mummble'
db['root']  = 'secret'

db.close()

现在测试一下:

import shelve
import getpass

db = shelve.open('passwd')

uname = raw_input("Username: ")
passw = getpass.getpass("Password: ")

if uname in db and db[uname] == passw:
    print "Login Sucessful!"
else:
    print "Invalid Username or Password"

db.close()

正如我在评论中所说,这将密码存储为纯文本并存在安全风险,但这似乎不是问题。否则,请查看标准库中的hashlib模块。

shelve可以像使用字典一样使用,但它实际上使用的是一个小型基础数据库(根据操作系统的不同,您应该看到一个名为passwd.db的文件)。注意我使用的是getpass,它是专门用于获取密码的标准库模块。如果您不想隐藏密码,可以使用raw_input