【发布时间】:2019-06-19 14:04:10
【问题描述】:
我正在尝试设置 python json 库,以便将具有其他字典元素的字典保存到文件中。浮点数很多,我想将位数限制为,例如7。
根据 SO encoder.FLOAT_REPR 上的其他帖子,应使用。但是它不起作用。
例如下面的代码,在 Python3.7.1 中运行,打印所有数字:
import json
json.encoder.FLOAT_REPR = lambda o: format(o, '.7f' )
d = dict()
d['val'] = 5.78686876876089075543
d['name'] = 'kjbkjbkj'
f = open('test.json', 'w')
json.dump(d, f, indent=4)
f.close()
我该如何解决?
这可能无关紧要,但我在 macOS 上。
编辑
这个问题被标记为重复。但是在the accepted answer (and until now the only one) to the original post 中明确指出:
注意:此解决方案不适用于 python 3.6+
所以那个解决方案不是正确的。另外它正在使用库simplejson不是库json。
【问题讨论】:
-
@Tomas Farias 在您发布的问题的答案中明确说明:
Note: This solution doesn't work on python 3.6+所以我认为它不是重复的,除非您当然确定它有效:如果是这样,请告诉我怎么做。 -
我同意这不是另一个问题的重复。 FWIW,过去我花了很多时间研究用
json.JSONEncoder类做类似的事情,我从查看它的源代码得出的结论是,如果不改变数据,做这种事情是不可行的-structure 在传入之前。也就是说,由于源代码可用,因此您可以创建库的自定义版本。也不是说simplejson与 Python 自己的json模块非常相似——以至于您几乎可以互换使用它们。 -
你能看看我的解决方案吗?如果我正确理解了这个问题,我相信我发布的内容是最简单和最好的。
-
@SwimBikeRun 可能是最简单的,但你永远不应该说你的答案是最好的:这有点自大,这里有些人可能比你更有经验。
-
@FrancescoBoi 是的,我在这个上看起来像个傻瓜:D。我几乎可以肯定 Decode 拥有所有的花里胡哨的 Encode,因为我只是做了这件事,但方向相反。这就是我粘贴未经测试的代码所得到的。糟糕!
标签: python json python-3.x floating-point