【问题标题】:Python json.dump produces file of size zero bytesPython json.dump 生成大小为零字节的文件
【发布时间】:2017-12-23 06:07:51
【问题描述】:

在我的代码的某个阶段,我需要将 python 字典转储到 json 文件中。这是执行此操作的代码:

def output_batch(self, batch):
    with open(os.path.join(self.get_current_job_directory(), 'batch_' + str(self.index) + '.json'), 'w') as json_file:
        json.dump(batch, json_file, sort_keys = True, indent = 4, separators = (',', ': '))
    exit()

这里的self.index 是一个唯一的整数索引,用于标识这个特定的实例。 self.get_current_job_directory() 返回应该创建文件的路径。

在转储之前记录字典的长度会返回42691。但是,输出文件的大小为零字节。这真的没有任何意义。即使是空字典,文件也会有 2 个字节长(以补偿 {})。

代码是高度并行化的 map-reduce 风格管道的一部分,几乎不可能在此处重现。现在在这样的设置中有一百万件事情可能出错,但是没有其他线程可以访问被转储的dict,也没有其他线程可以访问相同的输出文件。

*** 更新:在这个函数调用之后进程退出(通过调用exit()),可能与此有关?

关于为什么会发生这种情况的任何建议或想法?

【问题讨论】:

  • 可能很明显,但您是否 print(json_file) 并仔细检查您确实在写入正确的文件?
  • @kshikama 是的。我 100% 确定这不是问题。
  • 在您尝试 json 转储之前,您是否可以在该文件中写入“Hello World”或任何随机内容?
  • @kshikama 在某些情况下,我仍然会得到大小为 0 的文件。
  • 如果可能,我会尝试以"x" 模式打开文件。如果您随后遇到错误,可能有助于进一步调试。

标签: python json dictionary


【解决方案1】:

可能是with 上下文没有正确退出,位于函数末尾。尝试显式关闭文件。

def output_batch(self, batch):
    json_file = open(...):
    json.dump(batch, json_file, sort_keys = True, indent = 4, separators = (',', ': '))
    json_file.close()

此外,请确保您以写入权限调用 open('w'),并且您有权写入该位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多