2024-04-23 06:02:44 发布
网友
我正在这样写yaml文件
with open(fname, "w") as f: yaml.safe_dump({'allow':'', 'deny': ''}, f, default_flow_style=False, width=50, indent=4)
这将输出:
allow: ''
我想输出为
allow:
我该怎么做?
如果加载YAML src
在Python中,可以将None分配给键allow,这是正确的行为。
None
allow
如果您使用ruamel.yaml(我是其中的作者)及其RoundTripDumper,则None将按您的需要编写(这是IMO最可读的,尽管不是显式的):
RoundTripDumper
import ruamel.yaml print ruamel.yaml.dump(dict(allow=None), Dumper=ruamel.yaml.RoundTripDumper)
会给你:
您还可以适当地往返于此:
import ruamel.yaml yaml_src = """ allow: key2: Hello # some test """ data = ruamel.yaml.load(yaml_src, ruamel.yaml.RoundTripLoader) print('#### 1') print(data['allow']) print('#### 2') print(ruamel.yaml.dump(data, Dumper=ruamel.yaml.RoundTripDumper)) print('#### 3') print(type(data))
要获取输出:
#### 1 None #### 2 allow: key2: Hello # some test #### 3 <class 'ruamel.yaml.comments.CommentedMap'>
在上面,data是ordereddict的一个子类,它是跟踪输入的流样式、处理附加到行的注释、键的顺序等所必需的 这样的子类可以动态创建,但通常更容易从一些可读的、格式良好的YAML代码(可能已经保存在磁盘上)开始,然后更新/扩展这些值。
data
要从python读取None类型,请在yaml中使用null
null
像这样的YAML文件test.yml
test.yml
foo: null bar: null
将被python读取为
import yaml test = yaml.load(open('./test.yml')) print(test) foo: None bar: None
from yaml import SafeDumper import yaml data = {'deny': None, 'allow': None} SafeDumper.add_representer( type(None), lambda dumper, value: dumper.represent_scalar(u'tag:yaml.org,2002:null', '') ) with open('./yadayada.yaml', 'w') as output: yaml.safe_dump(data, output, default_flow_style=False)
有一种方法可以在python yaml本身中实现这一点。上述代码将生成一个文件,其中包含:
allow: deny:
如果加载YAML src
在Python中,可以将
None
分配给键allow
,这是正确的行为。如果您使用ruamel.yaml(我是其中的作者)及其
RoundTripDumper
,则None
将按您的需要编写(这是IMO最可读的,尽管不是显式的):会给你:
您还可以适当地往返于此:
要获取输出:
在上面,
data
是ordereddict的一个子类,它是跟踪输入的流样式、处理附加到行的注释、键的顺序等所必需的 这样的子类可以动态创建,但通常更容易从一些可读的、格式良好的YAML代码(可能已经保存在磁盘上)开始,然后更新/扩展这些值。要从python读取
None
类型,请在yaml中使用null
像这样的YAML文件
test.yml
将被python读取为
有一种方法可以在python yaml本身中实现这一点。上述代码将生成一个文件,其中包含:
相关问题 更多 >
编程相关推荐