[英]Python ruamel.yaml - preserving quote in value while convert yaml to dict and save result to yaml file
[英]remove single quotes from dict values while adding content to yaml file using python ruamel.yaml
我有一個 yaml 文件,如下所述 test1.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
現在我想在 test1.yaml 的資源下添加 test1_routable_net: { get_param: abc_routable_net } 這是我試過的代碼
import ruamel.yaml
yaml = ruamel.yaml.YAML()
test="{ get_param: abc_routable_net }".strip(‘\’’)
with open('/tmp/test1.yaml') as fp:
data = yaml.load(fp)
data['resources'].update({‘test1_routable_net’:test})
yaml.dump(data,file('/tes2.yaml', 'w'))
以上代碼的輸出是 tes2.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
test1_routable_net: '{ get_param: abc_routable_net }'
期望的輸出是
tes2.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
test1_routable_net: { get_param: abc_routable_net }
我嘗試使用test.strip('\'')
,但仍然沒有用我看到值的單引號....如何從值中刪除這些引號?
在你的程序中test
是一個字符串。 轉儲時字符串通常不會被引用,但如果它們的解釋不明確,它們就會被引用。 這就是為什么您的輸出周圍有單引號的原因:確保在此節點中讀回時不會被錯誤地解釋為 mapping 而不是 string 。 因此,使用.strip()
刪除不存在的引號不會執行任何操作。
你應該從你想要完成的事情向后工作(你實際上想要一個映射而不是一個字符串,正如你可以從輸出中看到的那樣)。
如果加載所需的輸出,您將看到test1_routable_net
的值是 python dict(或其子類),因此請確保這是您分配給test
的內容:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
test = { 'get_param': 'abc_routable_net' }
with open('./test1.yaml') as fp:
data = yaml.load(fp)
data['resources'].update({'test1_routable_net': test})
yaml.dump(data, sys.stdout)
這使:
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
test1_routable_net:
get_param: abc_routable_net
這在語義上與您想要的輸出相同,但由於您想要流式的get_param: abc_routable_net
,您可以添加:
yaml.default_flow_style=None
得到你想要的輸出。 您還可以查看將ruamel.comments.CommentedMap
分配給test
,這使您可以更精細地控制其樣式(和評論等)。
"test" 不是一個字符串,它是一個字典:例如:
import ruamel.yaml
import yaml
yaml = ruamel.yaml.YAML()
test={ 'get_param': 'abc_routable_net' }
with open('test1.yaml') as fp:
data = yaml.load(fp)
data['resources'].update({'test1_routable_net':test})
yaml.dump(data,open('test2.yaml', 'w'))
我有一個如下面提到的 yaml 文件 test1.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
現在我想在 test1.yaml 的資源下添加 test1_routable_net: { get_param: abc_routable_net } 這是我試過的代碼
import ruamel.yaml
yaml = ruamel.yaml.YAML()
test="{ get_param: abc_routable_net }".strip(‘\’’)
with open('/tmp/test1.yaml') as fp:
data = yaml.load(fp)
data['resources'].update({‘test1_routable_net’:test})
yaml.dump(data,file('/tes2.yaml', 'w'))
上面代碼的輸出是 tes2.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
test1_routable_net: '{ get_param: abc_routable_net }'
期望的輸出是
tes2.yaml
resources:
name:{get_param: vname}
ssh_keypair: {get_param: ssh_keypair}
test1_routable_net: { get_param: abc_routable_net }
我嘗試使用test.strip('\\'')
,但仍然沒有用,我看到值的單引號....如何從值中刪除這些引號?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.