我有一个基本的登录程序,它接受用户的用户名和相应的密码。我发现即使我们将数据附加到列表或添加到字典中,它也会在我们关闭程序后立即被删除。我想要的是一种以更永久的方式存储这些数据的方法,以便在我重新启动程序时可以再次访问它。
我尝试将文本文件用作永久存储空间,但程序经常会抛出错误。我希望有一种更有效,更强大的方法来存储数据。
欢迎任何建议,但如果他们使用标准模块,我会更喜欢,如果要使用模块的话。
答案 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
。