簡體   English   中英

使用 python ruamel.yaml 將內容添加到 yaml 文件時從 dict 值中刪除單引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM