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

Permanent storage on computer for data accepted from user

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

我曾尝试使用文本文件作为永久存储space,但程序经常会出错。我想有一个更有效和更强大的方式来存储数据。

欢迎提出任何建议,但我更愿意使用标准模块,如果要使用模块的话。

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

否则将其保存为 csv 格式始终是一个很好的解决方案。

您可以尝试 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可以像字典一样使用,但它实际上使用了一个小型基础数据库(根据OS,你应该看到一个名为passwd.db的文件) .请注意,我使用的是 getpass,这是一个专门用于获取密码的标准库模块。如果您不介意隐藏密码,可以使用 raw_input