python - pyyaml 将mac地址转为数字

标签 python ruby 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}

但后来我尝试了以下操作,并得到了预期的答复。

>>> 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适用于支持 sexagecimal numbers 的 YAML 1.1 版,所以小于 60 的正整数被冒号分隔,被认为是单个数字,你会得到它的十进制表示。如果您希望您的 MAC 地址被识别为字符串,只需添加引号,如

>>>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'}

关于python - pyyaml 将mac地址转为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872999/

相关文章:

python - 被 robots.txt : scrapy 禁止

ruby - 在什么情况下会使用 Sinatra 或 Merb?

ruby - Chef : Can I share common per-environment run list items?

rest - 如何为 YAML 对象中的几个键设置一个值

ruby-on-rails - 如何在不丢失注释和变量的情况下更新 Rails 语言环境 YAML 文件?

python - `"... ".format(**ctx)` 跳过未知键?

python - Django 查询集 : Exclude all row(s) if any one row with same id is excluded

python - 用于分隔列的字典的 pandas 列表

ruby - 按位与作为模数替代

vue.js - vue-browserify 将 yaml 文件导入为 javascript 对象 vuejs2