当前位置: 首页 > 知识库问答 >
问题:

“=”运算符在修改变量(Python)中的.json时不起作用

卢承弼
2023-03-14

我是Python新手,我正在尝试将数据存储在.json中,然后通过Python访问和修改它。目前我遇到一个问题,如果我尝试使用变量而不是直接修改它,我就无法修改数据。如果它不在变量中,或者我只是在读取信息,或者它不在函数中,它就可以正常工作。

import json

with open('testprog.json', 'r+') as f:
    data = json.load(f)
    x = int(data['valueOne']) 
    def test():
        x += 1
#VSC tells me this variable is not defined. 
#If I swap the variable for “int(data[‘valueOne’])” it works.
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()

    test()
    print("New first value is: "+str(data['valueOne']))

.json:

{
    "valueOne": 10,
    "valueTwo": 5,
    "valueThree": 8
}

共有2个答案

丌官瀚
2023-03-14

我假设与键valueOne关联的值是一个字符串。因此,您可以这样做:

data['valueOne'] = str(int(data['valueOne']) + 1)
云景焕
2023-03-14

尝试:

import json

with open('testprog.json', 'r+') as f:
    data = json.load(f)
    x = int(data['valueOne'])
    def test():
        data['valueOne'] = x + 1
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()

    test()
    print("New first value is: "+str(data['valueOne']))

输出:

新的第一个值是:11

局部变量“x”在赋值之前被引用,因此需要在函数的参数中传递x,如下所示:

import json

def test(f,x):
        x += 1
        # Here to update content of json file
        data['valueOne'] = x
        print("New value of X : "+ str(x))
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()
        
with open('testprog.json', 'r+') as f: 
    data = json.load(f)
    x = int(data['valueOne'])
    test(f,x)
    print("New first value is: "+str(data['valueOne']))

输出:

New value of X : 12 
New first value is: 12

下面是另一个查看X值变化的示例:

import json

def test(f,x):
    x += 1
    return x
        
with open('testprog.json', 'r+') as f: 
    data = json.load(f)
    x = int(data['valueOne'])
    print("old value of X : "+ str(x))
    x = test(f,x)
    print("New value of X : "+ str(x))
    # Here to update content of json file
    data['valueOne'] = x
    f.seek(0)
    json.dump(data, f, indent=4)
    f.truncate()
    print("New first value is: "+str(data['valueOne']))

输出:

old value of X : 12
New value of X : 13
New first value is: 13
 类似资料:
  • 我是Python新手,我正在尝试将数据存储在.json中,然后通过Python访问和修改它。目前我遇到一个问题,如果我尝试使用变量而不是直接修改它,我就无法修改数据。如果它不在变量中,或者我只是在读取信息,或者它不在函数中,它就可以正常工作。 . json:

  • 问题内容: 将数学应用于变量的常用方法是 是否可以像这样计算和操纵两个操作数? 然后我该如何连接op和两个变量以及? 我知道我可以比较运到,,,,然后分配和计算.... 但是我可以做些什么,如何告诉编译器op是运算符? 问题答案: 您可以使用运算符模块和字典:

  • 问题内容: Netbeans说我的三元运算符不是语句。怎么会? 我尝试过if / then / else对应项,并且工作正常: 问题答案: 三元运算符中的语句必须是非空的。他们需要退货。

  • 问题内容: 在这里, 我有两个变量,它们通过生成随机数。我希望它们继续滚动,直到两个变量同时生成两个不同的值。因此,我为此使用循环。正如我也明白了,请纠正我,如果我错了,行意为,不断翻滚,直到值 不等于5 和 不等于4 。但是,如果其中一个变量与其值匹配(diceRolled1 = 5 或 diceRolled2 = 4),则程序结束。这不是应该做什么,对吗?我已经运行了大约10次的代码,但是没有

  • 问题内容: 有没有办法修改闭包内部变量之一的绑定值?查看示例以更好地理解它。 问题答案: 我认为在Python中没有任何方法可以做到这一点。定义闭包后,将捕获封闭范围内变量的当前状态,并且不再具有可直接引用的名称(从闭包外部)。如果要再次调用,则新的闭包将具有与封闭范围不同的变量集。 在简单的示例中,使用类可能会更好: 如果您确实使用了这种技术,我将不再使用该名称,因为它实际上不再是一个闭包。但是

  • 这可能是一个愚蠢的问题,但看看操作符到函数的映射,我注意到没有函数来表示