Python json.dump生成大小为零字节的文件

时间:2017-12-23 06:07:52

标签: python json dictionary

在我的代码的某个阶段,我需要将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。但是输出文件的大小为零字节。这没有任何意义。即使在空dict的情况下,文件也会长2个字节(以补偿{})。

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

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

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

1 个答案:

答案 0 :(得分: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'),并且您有权写入该位置。