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

2023-11-24

我在使用 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}。这种行为的原因可能是什么?


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

就在之前json.dump,文件对象指向文件末尾。然后您可以从该位置转储数据。

如果您尝试先倒回文件,它应该会覆盖从头开始的数据:

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

json.dump() 是否附加到文件? 的相关文章

随机推荐

  • 这个带有“箭头”(=>、等号和大于号)的 C# 代码是什么意思以及它是如何调用的?

    我试图在我的 C 客户端程序中启用 SSL 并发现以下代码在这个答案中 System Net ServicePointManager ServerCertificateValidationCallback se cert chain ssl
  • Sitecore 在我的 MVC 解决方案中提供了一个空白页面,仅包含文本“默认页面”

    当我浏览到我的起始页时 例如 sv 我得到一个空白页面 上面只写着 默认页面 但是 当我尝试 sv 时它起作用了 不过 像 sv example 这样的子页面可以在没有斜线的情况下工作 我正在使用仅包含 MVC 视图的 Sitecore 7
  • 带误差条的 Gnuplot 条形图直方图

    我想要我的基准测试结果 我比较两个虚拟机 并具有以下形式的数据 基准 VM1 TIME VM1 ERROR VM2 TIME VM2 ERROR 我想根据这些数据生成一个条形图 应如下所示 有人可以提供如何执行此操作的代码吗 我知道这种请求
  • 如何迭代/流式传输 gzip 文件(包含单个 csv)?

    如何迭代包含单个文本文件 csv 的 gzip 压缩文件 搜索 crates io 我发现flate2其中解压的代码示例如下 extern crate flate2 use std io prelude use flate2 read Gz
  • CodeIgniter REST API 库 Ajax PUT 抛出 403 Forbidden

    我让库的其余部分充分工作 只是尝试生成 api 密钥 并在通过 ajax 执行时抛出 403 禁止 status false error Invalid API Key 我追踪到 REST Controller 下的 remap 函数 几乎
  • Java 8 泛型类型方法参考

    我在使用 Java 8 方法引用与泛型类型时遇到问题 我已经简化了我的问题 以明确问题所在 以下代码失败 public static void main String args new Mapper TestEvent setId priv
  • websphere 上的字符编码问题

    我在两个应用程序服务器 websphere 8 0 0 3 中部署的应用程序存在以下问题 这些服务器具有相同的配置文件 为了确定起见 我一度导出了一个配置文件并将其导入到第三个应用程序服务器 并且我在读取和显示以 iso8859 7 编码的
  • 来自 Bloomberg 价格的 IMPORTXML 和正确的 XPath [重复]

    这个问题在这里已经有答案了 我正在尝试从彭博网站获取共同基金的价格 我尝试在 Google 表格中使用 ImportXML 函数 放入 Bloomberg 链接并复制完整的 XPath 但它总是返回 N A 这是我的功能 IMPORTXML
  • Wix修改现有的ini文件

    我试图在 Wix 中修改 ini 文件 如果它不存在 则 msi 不会完成 我该如何检查这个 我真的很想修改它 是的 我查看了其他 stackoverflow 问题 答案以及 google 我正在尝试这个
  • 模板中的 ngIf-else

    我正在尝试加载pictureA or pictureB 我的第一个解决方案是这样的 img src my picture width 180 height 80 img src default picture 但我想用if else如 AP
  • Uri.IsWellFormedUriString 需要更新吗?

    我想我可能发现了 Uri IsWellFormedUriString 方法中的错误 可能是因为它只符合RFC 2396 and RFC 2732标准而不是新的RFC 3986这使得上述两个过时了 我认为发生的情况是任何非 us ascii
  • 从 nsarray 中获取 n 个随机对象(例如 4)

    我有一个很大的 NSArray 名称 我需要从该数组中随机获取 4 条记录 名称 我该怎么做 include
  • 是否有可能在 emgucv 中找到“斑点”区域的边缘?

    我有一个看起来像这样的图像 我想找到黑暗部分的边缘 如下所示 红线是我正在寻找的 我尝试了几种方法 但没有一个有效 所以我希望有一位 emgu 大师愿意帮助我 方法一 将图像转换为灰度 去除噪音并反转 删除任何不太亮的东西 获取精明和多边形
  • startMonitoringSignificantLocationChanges 的替代方案?

    我是iPhone应用程序开发的初学者 但我正在尝试制作一个应用程序 基本上每隔一段时间更新一次您的位置 当它不在前台时 这样我就可以绘制一个人在他 她时去过的地方启动一个应用程序 我以为我可以使用 startMonitoringSignif
  • 无法获取 Gradle 包装器属性

    当我尝试导入项目时出现以下错误 无法从以下位置获取 Gradle 包装器属性 F projects Polyfills cordova platforms android gradle wrapper gradle wrapper prop
  • 如何在 Maven 中使用 BOM 文件?

    我在互联网上进行了大量研究 但没有找到任何简单的解释如何处理BOM使用 Maven 生成文件 问题是我使用 JBoss 7 1 1 并且我想将所有 JBoss 客户端 jar 包含在pom xml JBoss 有一本手册说我应该使用 BOM
  • Python 样条线或其他与 x 轴上的时间一起工作的插值?

    尝试使用非常有用的 pandas 来处理作为时间序列的数据 我现在绊倒了这样一个事实 似乎不存在可以直接对具有 DateTime 作为 x 的数据进行插值 使用样条曲线或类似方法 的库轴 我似乎总是被迫首先转换为某个浮点数 例如 1980
  • SQL Server 2005 非聚集索引死锁

    谁能帮我解决 SQL Server 2005 中的死锁问题 对于一个简单的测试 我有一个表 Book 它有一个主键 id 和一个列名 该主键的默认索引是非聚集的 当两个会话同时运行时就会发生死锁 活动监视器显示第一个会话 step 1 使用
  • Heroku 和 node-cron?

    所以我知道 Heroku 的免费测功机在没有任何流量时会 放松 这会如何影响我使用 node cron 模块实现的 cron 作业 当您的空闲测功机处于睡眠状态时 由node cron 安排的作业将不会运行 作为替代方案 您可以使用Hero
  • json.dump() 是否附加到文件?

    我在使用 json dump 时遇到一些意外行为 我正在创建一个文件results 空 然后在代码中使用它 如下所示 with open results r as fp temp try file not empty load existi