Ans*_*rta 2 ruby python yaml pyyaml
我在加载带有mac地址的yaml文件时遇到了这个奇怪的问题,其中地址转换为数字.
>>> yaml.safe_load('abc: 11:00:00:00:00:00')
{'abc': 8553600000}
>>> yaml.safe_load('abc: 99:00:00:00:00:00')
{'abc': 76982400000}
Run Code Online (Sandbox Code Playgroud)
但后来我尝试了以下,我得到了预期的答案.
>>> yaml.safe_load('abc: ff:00:00:00:00:00')
{'abc': 'ff:00:00:00:00:00'}
Run Code Online (Sandbox Code Playgroud)
我知道解决方案是将mac地址放在引号内,但我想知道这种行为的原因.
有趣的是,我用ruby尝试了相同的数据并得到了类似的结果.
编辑
在仅使用数字的情况下添加新的测试数据
>>> yaml.load('abc: 52:00:00:60:00:00')
{'abc': '52:00:00:60:00:00'}
Run Code Online (Sandbox Code Playgroud)
pyyaml与支持六十进制数字的 YAML 1.1版一起使用,因此用冒号分隔的低于60的正整数被视为单个数字,并且您将获得其十进制表示.如果您希望将MAC地址识别为字符串,只需添加引号即可
>>>yaml.safe_load('abc: "11:00:00:00:00:00"')
{'abc': '11:00:00:00:00:00'}
Run Code Online (Sandbox Code Playgroud)
还有ruamel.yaml似乎支持YAML版本1.2,他们已经摆脱了sexagecimals:
>>>import ruamel.yaml
>>>ruamel.yaml.safe_load('abc: 11:00:00:00:00')
{'abc': '11:00:00:00:00'}
Run Code Online (Sandbox Code Playgroud)