如何转储带有前导零的 int 的 YAML?
How to dump a YAML with an int with leading zeros?
我需要转储带有前导零的整数,但不是字符串形式。
我可以通过这种方式像字符串一样转储它:
import sys
from ruamel.yaml import YAML
data = {'identifier': '001'}
yaml = YAML()
yaml.dump(data, sys.stdout)
结果是:
identifier: '001'
我不需要转储为字符串,而是转储为数字。
我需要这样的结果:
identifier: 001
我该怎么做?
>>> data = {'identifier': 0o001}
这将转换为整数。但是,不是您指定的格式。
如果需要检查是否可以生成特定输出,首先要做的是
尝试 round-trip 结果:
import sys
import ruamel.yaml
yaml_str = """\
identifier: 001
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
data['another'] = double_o_one = data['identifier']
yaml.dump(data, sys.stdout)
给出:
identifier: 001
another: 001
所以这证明这可以通过编程方式完成,如果最坏的情况发生并且
你不知道如何从头开始制作 double_o_one
,你可以
从字符串加载它。
如果你再调查一下,看看 scalarint.py
的来源:
print(type(double_o_one))
print(double_o_one.__dict__)
print()
data['james'] = double_o_seven = ruamel.yaml.scalarint.ScalarInt(7, width=3)
yaml.dump(data, sys.stdout)
这给出了:
<class 'ruamel.yaml.scalarint.ScalarInt'>
{'_width': 3, '_underscore': None}
identifier: 001
another: 001
james: 007
因此,如果您从字符串 x = '001'
开始,您会 x = ScalarInt(int(x), len(x))
我需要转储带有前导零的整数,但不是字符串形式。 我可以通过这种方式像字符串一样转储它:
import sys
from ruamel.yaml import YAML
data = {'identifier': '001'}
yaml = YAML()
yaml.dump(data, sys.stdout)
结果是:
identifier: '001'
我不需要转储为字符串,而是转储为数字。
我需要这样的结果:
identifier: 001
我该怎么做?
>>> data = {'identifier': 0o001}
这将转换为整数。但是,不是您指定的格式。
如果需要检查是否可以生成特定输出,首先要做的是 尝试 round-trip 结果:
import sys
import ruamel.yaml
yaml_str = """\
identifier: 001
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
data['another'] = double_o_one = data['identifier']
yaml.dump(data, sys.stdout)
给出:
identifier: 001
another: 001
所以这证明这可以通过编程方式完成,如果最坏的情况发生并且
你不知道如何从头开始制作 double_o_one
,你可以
从字符串加载它。
如果你再调查一下,看看 scalarint.py
的来源:
print(type(double_o_one))
print(double_o_one.__dict__)
print()
data['james'] = double_o_seven = ruamel.yaml.scalarint.ScalarInt(7, width=3)
yaml.dump(data, sys.stdout)
这给出了:
<class 'ruamel.yaml.scalarint.ScalarInt'>
{'_width': 3, '_underscore': None}
identifier: 001
another: 001
james: 007
因此,如果您从字符串 x = '001'
开始,您会 x = ScalarInt(int(x), len(x))