users = {
"Hi":"HM123",
"alan": "12122",
"12": "11"
}
def adder():
new_user = input("Please enter user's name: ").strip()
new_pwd = ""
confirmer = "0"
while new_pwd != confirmer:
new_pwd = input("please enter a new Password: ").strip()
confirmer = input("please confirm your password: ").strip()
if new_pwd != confirmer:
print("passwords does not match!!")
users[new_user] = new_pwd
adder()
我使用字典作为用户名和密码的集合来练习创建一个简单的功能登录页面。(我将此作为一个模块导入到我的主文件)。当我添加新用户和密码时,上面的代码暂时将其添加到字典中,但是当我重新运行脚本并尝试新的用户名和pwds时,它返回不正确的用户名和密码,因为它们不在字典中。
希望找到一种方法,只需用户输入就可以永久地将新的用户名和密码添加到字典中,而无需我自己修改字典。
您的字典(或多或少)存储在RAM中,这是易失的-您不能(或至少,您不应该尝试)在不同的脚本运行之间保留它。
这就是人们使用数据库的原因——它们存储在磁盘上,不会消失,除非发生了非常糟糕的事情;)
最简单的方法是将它们存储在单个json
文件中。它是一种非常类似于python字典的格式。Python有json
库,允许它将这样的文件解析为Python的dict
,反之-将dict
放回文件中。
示例如下:
import json
with open("users.json", "r+") as f:
# convert content of file users.json into users variable - it will be a dict
users = json.load(f)
def store_to_file(users):
with open("users.json", "w") as f:
# save the users dict into the file users.json in json format
json.dump(users, f, indent=4)
def adder():
...
store_to_file(users)
adder()
不要忘记创建文件users.json
!
{
"Hi": "HM123",
"alan": "12122",
"12": "11"
}
Python字典可以转换为JSON文本并写入永久存储。
你也可以考虑使用pickle模块序列化字典。
下面是两种技术的一个例子:
import pickle
import json
PFILE = '/Volumes/G-Drive/users.pkl'
JFILE = '/Volumes/G-Drive/users.json'
users = {
"Hi": "HM123",
"alan": "12122",
"12": "11"
}
with open(PFILE, 'wb') as db:
pickle.dump(users, db) # save the dictionary (serialise)
with open(PFILE, 'rb') as db:
_users = pickle.load(db) # retrieve serialised data
print(_users)
with open(JFILE, 'w') as db:
json.dump(users, db) # save as JSON
with open(JFILE) as db:
_users = json.load(db) # retrieve JSON and convert to Python dictionary
print(_users)
输出:
{'Hi': 'HM123', 'alan': '12122', '12': '11'}
{'Hi': 'HM123', 'alan': '12122', '12': '11'}