我用下一個最小的例子來解釋我的問題: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)運(yùn)行結(jié)果為: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變?yōu)椋雌饋硐褚驗(yàn)槲覀冊谄渲?。但其?2 個輸入沒問題。1:868:你知道上面是一個復(fù)雜系統(tǒng)的簡化,其中"usb_otg_path: 1:8"是我無法更改的輸入值,也是yaml.load它用于將字符串更改為 python 對象的基本機(jī)制。然后,如果可能的話,我可以做{'usb_otg_path': '1:8'}一些小的改變(我們需要向上游到那個項(xiàng)目,所以可能不能做大的改變來影響其他人)?諸如更改任何參數(shù)yaml.load或其他內(nèi)容之類的東西?
1 回答

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