我嘗試使用以下代碼段將 dict 物件轉儲為 YAML:
from ruamel.yaml import YAML
# YAML settings
yaml = YAML(typ="rt")
yaml.default_flow_style = False
yaml.explicit_start = False
yaml.indent(mapping=2, sequence=4, offset=2)
rip= {"rip_routes": ["23.24.10.0/15", "23.30.0.10/15", "50.73.11.0/16", "198.0.0.0/16"]}
file = 'test.yaml'
with open(file, "w") as f:
yaml.dump(rip, f)
它正確轉儲,但我在串列末尾添加了一個新行
rip_routes:
- 23.24.10.0/15
- 23.30.0.10/15
- 198.0.11.0/16
我不希望在檔案末尾插入新行。我該怎么做?
uj5u.com熱心網友回復:
換行符是塊樣式序列元素表示代碼的一部分。而且由于該代碼對背景關系沒有太多了解,當然也沒有關于表示要轉儲到檔案中的最后一個元素的知識,因此幾乎不可能不輸出最后的換行符。
但是,該.dump()方法有一個可選transform引數,允許您通過某個過濾器運行轉儲文本的輸出:
import sys
import pathlib
import string
import ruamel.yaml
# YAML settings
yaml = ruamel.yaml.YAML(typ="rt")
yaml.default_flow_style = False
yaml.explicit_start = False
yaml.indent(mapping=2, sequence=4, offset=2)
rip= {"rip_routes": ["23.24.10.0/15", "23.30.0.10/15", "50.73.11.0/16", "198.0.0.0/16"]}
def strip_final_newline(s):
if not s or s[-1] != '\n':
return s
return s[:-1]
file = pathlib.Path('test.yaml')
yaml.dump(rip, file, transform=strip_final_newline)
print(repr(file.read_text()))
這使:
'rip_routes:\n - 23.24.10.0/15\n - 23.30.0.10/15\n - 50.73.11.0/16\n - 198.0.0.0/16'
最好使用Path()上面代碼中的實體,特別是如果您的 YAML 檔案將包含非 ASCII 字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326717.html
標籤:Python 蟒蛇-3.x 雅姆 ruamel.yaml
