我用下一個最小的例子來解釋我的問題:test.py#! /usr/bin/python3import jinja2import yamlfrom yaml import CSafeLoader as SafeLoaderdevices = [ "usb_otg_path: 1:8", "usb_otg_path: m1:8", "usb_otg_path: 18",]for device in devices: template = jinja2.Template(device) device_template = template.render() print(device_template) obj = yaml.load(device_template, Loader=SafeLoader) print(obj)運行結果為:root@pie:~# python3 test.pyusb_otg_path: 1:8{'usb_otg_path': 68}usb_otg_path: m1:8{'usb_otg_path': 'm1:8'}usb_otg_path: 18{'usb_otg_path': 18}您可以查看 的值是否device_template為usb_otg_path: 1:8,然后 之后yaml.load變為,看起來像因為我們在其中。但其他 2 個輸入沒問題。1:868:你知道上面是一個復雜系統的簡化,其中"usb_otg_path: 1:8"是我無法更改的輸入值,也是yaml.load它用于將字符串更改為 python 對象的基本機制。然后,如果可能的話,我可以做{'usb_otg_path': '1:8'}一些小的改變(我們需要向上游到那個項目,所以可能不能做大的改變來影響其他人)?諸如更改任何參數yaml.load或其他內容之類的東西?
1 回答

四季花海
TA貢獻1811條經驗 獲得超5個贊
YAML 允許數字文字(標量)格式化為x:y:z
并將它們解釋為“六十進制”,也就是說:基數 60。
1:8
因此被 YAML 解釋為1*60**1 + 8*60**0
,顯然給了你68
。
值得注意的是,您還有m1:8
一個字符串和18
一個數字。你聽起來像你想要所有的字符串?這個答案可能有用:
yaml.load(yaml, Loader=yaml.BaseLoader)
這會禁用自動值轉換,因為 BaseLoader“不解析或支持任何標簽,只構造基本的 Python 對象:列表、字典和 Unicode 字符串?!?/p>
添加回答
舉報
0/150
提交
取消