【发布时间】: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