我是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
}
我假设与键valueOne关联的值是一个字符串。因此,您可以这样做:
data['valueOne'] = str(int(data['valueOne']) + 1)
尝试:
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中没有任何方法可以做到这一点。定义闭包后,将捕获封闭范围内变量的当前状态,并且不再具有可直接引用的名称(从闭包外部)。如果要再次调用,则新的闭包将具有与封闭范围不同的变量集。 在简单的示例中,使用类可能会更好: 如果您确实使用了这种技术,我将不再使用该名称,因为它实际上不再是一个闭包。但是
这可能是一个愚蠢的问题,但看看操作符到函数的映射,我注意到没有函数来表示