gpt4 book ai didi

python - 使用 JSON 文件存储和检索列表数据

转载 作者:行者123 更新时间:2023-12-04 01:22:35 25 4
gpt4 key购买 nike

每次我在下一个程序执行/ session 期间拉取 JSON 文件时,以前的数据都会被覆盖。最终,我要做的是将我的数据保存到一个文件中,并在下次我想运行该程序时检索它。每当我运行程序时,我都想将数据附加到列表中。

import json
import os.path

income = []

def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income = json.load(f)
else:
pass

def desire_func():
x = input('What do you want to do? ')
if x != 'n':
transactions()
print(income)
else:
return

def transactions():
with open('income.json', 'w') as g:
entry = float(input('Transaction info: '))
income.append(entry)
json.dump(income, g)
desire_func()

file_exists()
transactions()
print(income)

任何帮助将不胜感激,因为我试图从多个角度解决这个问题并且总是遇到不同的问题。最初,我试图对数据进行 pickle,这似乎远没有那么可靠,但我对任何可能有效的方法持开放态度。

预先感谢您的帮助。

编辑:添加到 desire_func() 中,这样您就可以在排除故障时轻松地将多次添加到同一个列表(收入)。

最佳答案

您似乎不想追加,而是想将加载的 JSON 设置到 income 中,以防止每次迭代时数组嵌套越来越深。

def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income (json.load(f))
else:
pass

应该变成

def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income = json.load(f)
else:
pass

收入变量的列表格式应保存在 JSON 文件中。

例子:

>>> testlist = ['test', 'test2']
>>> import json
>>> with open('income.json', 'w') as g:
... json.dump(testlist, g)
...

退出并重启

>>> import json
>>> with open('income.json') as f:
... testlist = json.load(f)
...
>>> testlist
['test', 'test2']

编辑:所以,我认为可能是一个问题的一件事是关于变量范围。通常函数带有参数。这确保在代码的其他地方使用相同变量名的情况下,函数变量将取什么值是清楚的。使用您当前的代码,如果您在交易函数中打印收入变量,您将看到它是一个空列表。

您可以通过将列表传递给您的函数来解决此问题:

import json
import os.path

def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income = json.load(f)
print(income)
return income
else:
return []

def transactions(income):
print(income)
with open('income.json', 'w') as g:
entry = float(input('Transaction info: '))
print(entry)
income.append(entry)
print(income)
json.dump(income, g)

income = file_exists()
transactions(income)
print(income)

关于python - 使用 JSON 文件存储和检索列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62418874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com