json.dump()是否附加到文件?

2024-04-27 07:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对json.dump()有一些意想不到的行为。我正在创建一个文件results(空),然后在如下代码中使用它:

        with open(results, 'r+') as fp:
            temp = {}
            try:
                # file not empty, load existing dict, and add a key value to it
                temp = json.load(fp)
                temp[key] = value
            except json.decoder.JSONDecodeError:
                # file is empty, create a new dict 
                temp[key] = value
            # write the dictionary back into file
            json.dump(temp, fp)

如果上面的引用执行一次,它就可以正常工作。但是,如果我执行两次,我希望有一个具有两个键的字典:{key1: value1, key2: value2},但是我得到的是两个字典:{key1: value1}{key2: value2}。这种行为的原因可能是什么?


Tags: keyjson字典valueloaddumptempresults
1条回答
网友
1楼 · 发布于 2024-04-27 07:16:23

在运行代码之前和之后查看输出文件,您应该了解发生了什么。

就在json.dump之前,file对象指向文件的末尾。然后从这个位置转储数据。

如果您尝试先倒带文件,它应该从一开始就覆盖数据:

fp.seek(0)
json.dump(temp, fp)

但是,如果第一个对象写入的数据少于文件中已有的数据,则这可能会使悬挂数据超出第一个对象。因此,我建议您重新构造代码,以便在两次操作中读取和写入文件,在写入时擦除文件。例如:

import json

filename = "foo"

print("Reading %s" % filename)
try:
    with open(filename, "rt") as fp:
        data = json.load(fp)
    print("Data: %s" % data)
except IOError:
    print("Could not read file, starting from scratch")
    data = {}

# Add some data
data["key2"] = "value2"

print("Overwriting %s" % filename)
with open(filename, "wt") as fp:
    json.dump(data, fp)

相关问题 更多 >