【问题标题】:Permanent storage on computer for data accepted from user在计算机上永久存储用户接受的数据
【发布时间】:2015-07-29 20:25:02
【问题描述】:

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

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

欢迎任何建议,但如果他们使用标准模块,我更愿意使用模块。

【问题讨论】:

  • “我曾尝试使用文本文件作为数据库...我希望有一种更高效、更强大的方式来存储数据” - 也许是数据库?
  • 撇开将密码存储为纯文本的安全隐患,您可能希望在使用文本文件时解决错误。没有这些技能,你的编程不会走得太远。请认真重新考虑是否应该将这些密码存储为纯文本!
  • 我的意思是永久存储空间。我会进行编辑
  • @cdarke 这不是我正在研究的严肃登录程序。这只是我决定做的有趣的事情
  • 你的解释器抛出了什么样的错误?

标签: python store


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以试试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()
    

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2021-06-12
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多