我想在Python中创建JSON文件,该文件存储X和Y值。它应该看起来像这样:
{"X": [[1,2,3], [2,3,5], [1,2,6], [1,2,3], [2,3,5], [1,2,6]],"Y": [3,5,1,3,5,1]}
这是我编写的代码,首先我要检查文件是否为空(如果是,则在json文件中创建X和Y)。
def save_data(x, y):
data_from_json = {}
with open('data_sets.json', 'r+') as json_file:
if (os.stat('data_sets.json').st_size == 0):
if "X" not in data_from_json:
data_from_json.setdefault('X', x)
if "Y" not in data_from_json:
data_from_json.setdefault('Y', y)
json.dump(data_from_json, json_file)
with open('data_sets.json', 'r+') as json_file:
data_from_json = json.load(json_file)
data_from_json['X'].append(x)
data_from_json['Y'].append(y)
json.dump(data_from_json, json_file)
我得到的是这样的:
{"X": [[1,2,3], [2,3,5], [1,2,6]],"Y": [3,5,1]}{"X": [[1,2,3], [2,3,5], [1,2,6]],"Y": [3,5,1]}
而不是在X和Y后面附加新值。我该怎么办?
答案 0 :(得分:1)
文件为空时,您将JSON写入两次。编写初始字典,然后再次读取文件,并将其追加到X
和Y
列表中。
将代码路径分为两部分更为简单:一个用于创建初始文件,另一部分用于附加到现有文件。
此外,如果使用相同的文件开头来读取和写入文件,则需要在它们之间调用seek()
以倒退到文件的开头。否则,您将在原始版本之后编写更新后的JSON。
def save_data(x, y):
if (os.stat('data_sets.json').st_size == 0):
# File is empty, create initial dictionary
data_from_json = {"X": [x], "Y", [y]}
with open('data_sets.json', 'w') as json_file:
json.dump(data_from_json, json_file)
else:
with open('data_sets.json', 'r+') as json_file:
data_from_json = json.load(json_file)
data_from_json.setdefault('X', [])
data_from_json.setdefault('Y', [])
data_from_json['X'].append(x)
data_from_json['Y'].append(y)
json_file.seek(0)
json.dump(data_from_json, json_file)