pyyaml 将 mac 地址转换为数字
pyyaml converts mac address to number
我在加载带有 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}
但后来我尝试了以下内容,并得到了预期的答复。
>>> yaml.safe_load('abc: ff:00:00:00:00:00')
{'abc': 'ff:00:00:00:00:00'}
我知道解决方案是将 mac 地址放在引号内,但我想知道这种行为的原因。
有趣的是,我用 ruby 尝试了相同的数据并得到了相似的结果。
编辑
在仅适用于数字的地方添加新的测试数据
>>> yaml.load('abc: 52:00:00:60:00:00')
{'abc': '52:00:00:60:00:00'}
pyyaml
works with YAML version 1.1 which supports sexagecimal numbers,所以小于60的正整数用冒号分隔被认为是单个数字,你得到它的十进制表示。如果你想让你的 MAC-addresses 被识别为字符串,只需添加像
这样的引号
>>>yaml.safe_load('abc: "11:00:00:00:00:00"')
{'abc': '11:00:00:00:00:00'}
还有 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'}
11:00:00:00:00:00
(11 * 60 * 60 * 60 * 60 * 60 = 8553600000
)
99:00:00:00:00:00
(99 * 60 * 60 * 60 * 60 * 60 = 76982400000
)
被认为是数字,因为它们都以十进制数开头,所有其他部分都是从0
到[=15的十进制数=].
ff:00:00:00:00:00
是一个 字符串 ,因为它包含一个 非数字 (字母)符号。
52:00:00:60:00:00
是一个 字符串,因为它包含的数字 超出了 0
到 59
[= 的范围51=] 不在第一个位置。
更具体地说:
如果第一部分是一个(任意)十进制数并且所有其他部分是从0
到59
,假设个别部分(不包括第一个)是基数60
的位置数系中的数字,所以它代表一个整数.
在所有其他情况下,它应该是 字符串。
我在加载带有 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}
但后来我尝试了以下内容,并得到了预期的答复。
>>> yaml.safe_load('abc: ff:00:00:00:00:00')
{'abc': 'ff:00:00:00:00:00'}
我知道解决方案是将 mac 地址放在引号内,但我想知道这种行为的原因。
有趣的是,我用 ruby 尝试了相同的数据并得到了相似的结果。
编辑
在仅适用于数字的地方添加新的测试数据
>>> yaml.load('abc: 52:00:00:60:00:00')
{'abc': '52:00:00:60:00:00'}
pyyaml
works with YAML version 1.1 which supports sexagecimal numbers,所以小于60的正整数用冒号分隔被认为是单个数字,你得到它的十进制表示。如果你想让你的 MAC-addresses 被识别为字符串,只需添加像
>>>yaml.safe_load('abc: "11:00:00:00:00:00"')
{'abc': '11:00:00:00:00:00'}
还有 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'}
11:00:00:00:00:00
(11 * 60 * 60 * 60 * 60 * 60 = 8553600000
)
99:00:00:00:00:00
(99 * 60 * 60 * 60 * 60 * 60 = 76982400000
)
被认为是数字,因为它们都以十进制数开头,所有其他部分都是从0
到[=15的十进制数=].
ff:00:00:00:00:00
是一个 字符串 ,因为它包含一个 非数字 (字母)符号。
52:00:00:60:00:00
是一个 字符串,因为它包含的数字 超出了 0
到 59
[= 的范围51=] 不在第一个位置。
更具体地说:
如果第一部分是一个(任意)十进制数并且所有其他部分是从0
到59
,假设个别部分(不包括第一个)是基数60
的位置数系中的数字,所以它代表一个整数.
在所有其他情况下,它应该是 字符串。