Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法将JSON文件作为字典加载_Python_Json - Fatal编程技术网

Python 无法将JSON文件作为字典加载

Python 无法将JSON文件作为字典加载,python,json,Python,Json,我在VisualStudio代码中创建了一个登录系统,用户可以在其中创建一个新帐户。该信息应以Dict格式存储在JSON文件中,用户名为密钥,密码为值。到目前为止,除了带有dict的JSON文件不会在Python中加载之外,所有的东西都能正常工作,我不知道为什么 import json status = "" def displayMenu(): loadFile() print(users.keys()) saveFile() status = input(

我在VisualStudio代码中创建了一个登录系统,用户可以在其中创建一个新帐户。该信息应以Dict格式存储在JSON文件中,用户名为密钥,密码为值。到目前为止,除了带有dict的JSON文件不会在Python中加载之外,所有的东西都能正常工作,我不知道为什么

import json

status = ""

def displayMenu():
    loadFile()
    print(users.keys())
    saveFile()
    status = input("Are you registered user? y/n? Press q to quit")
    if status == "y":
        oldUser()
    elif status == "n":
        newUser()


def newUser():
    createLogin = input("Create login name: ")

    if createLogin in users:
        print("\nLogin name already exist!\n")
    else:
        createPassw = input("Create password: ")
        users[createLogin] = createPassw
        print("\nUser created\n")

def oldUser():
    login = input("Enter login name: ")
    passw = input("Enter password: ")

    if login in users and users[login] == passw:
        print("\nLogin successful!\n")
    else:
        print("\nUser doesn't exist or wrong password!\n")

def saveFile():
    with open('personal.json', 'a') as json_file:
        json.dump(users, json_file)

def loadFile():
    with open('personal.json', 'r') as json_file:
        users = json.load(json_file)

while status != "q":
    displayMenu()

这通常是使用数据库完成的。但是,如果您使用一个存储字典的
JSON
表示的文件来执行此操作,那么有三件事。(1) 您必须防止两个单独的进程同时写入文件,因此请查看
saveFile
函数的文件锁定,例如
PyPI
存储库中的package
filelock
。(2) 您不希望使用标志
a
打开输出文件,而是使用标志“w”替换原始内容,也就是说,您不希望使用多个背对背的词典,这就是您所得到的。(3) 密码应该加密。我的第一条评论中的第2点(我超出了评论的大小限制)可能是导致错误的原因。这通常是使用数据库完成的。但是,如果您使用一个存储字典的
JSON
表示的文件来执行此操作,那么有三件事。(1) 您必须防止两个单独的进程同时写入文件,因此请查看
saveFile
函数的文件锁定,例如
PyPI
存储库中的package
filelock
。(2) 您不希望使用标志
a
打开输出文件,而是使用标志“w”替换原始内容,也就是说,您不希望使用多个背对背的词典,这就是您所得到的。(3) 密码应该加密。我的第一条评论中的第2点(我超出了评论的大小限制)可能是导致您出错的原因。