gpt4 book ai didi

python - 如何在 Python 中舍入 yaml.dump 的数字输出?

转载 作者:行者123 更新时间:2023-11-28 21:49:08 25 4
gpt4 key购买 nike

是否有一种干净的方法来控制 yaml.dump 的数字舍入输出?例如,我有一个具有不同复杂度变量的类,其中一些是 double 字,我想四舍五入说第 4 位。此 yaml 输出仅供显示;它不会被加载(即 yaml.load 不会被使用)。

作为一个简单的例子,考虑下面的 A 类:

import yaml
class A:
def __init__(self):
self.a = 1/7
self.b = 'some text'
self.c = [1/11, 1/13, 1/17, 'some more text']

def __repr__(self):
return yaml.dump(self)

A()

有输出

!!python/object:__main__.A
a: 0.14285714285714285
b: some text
c: [0.09090909090909091, 0.07692307692307693, 0.058823529411764705, some more text]

和期望的输出:

!!python/object:__main__.A
a: 0.1429
b: some text
c: [0.0909, 0.0769, 0.0588, some more text]

我想这可以用 yaml.representative 以某种干净的方式完成。我想避免使用字符串 output 的舍入,因为实际的类结构可能更复杂(递归等)

最佳答案

您可以手动舍入:

#!/usr/bin/env python
import yaml

def float_representer(dumper, value):
text = '{0:.4f}'.format(value)
return dumper.represent_scalar(u'tag:yaml.org,2002:float', text)
yaml.add_representer(float, float_representer)

print(yaml.safe_dump([1 / 11, 1 / 13, 1 / 17, 'some more text']))
print(yaml.dump([1 / 11, 1 / 13, 1 / 17, 'some more text']))

输出

[0.09090909090909091, 0.07692307692307693, 0.058823529411764705, some more text]

[0.0909, 0.0769, 0.0588, some more text]

您可能需要为极端情况添加更多代码,请参阅 represent_float()作为@memoselyk suggested .

关于python - 如何在 Python 中舍入 yaml.dump 的数字输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com