首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何输出python yaml文件中的空白值?

如何输出python yaml文件中的空白值?
EN

Stack Overflow用户
提问于 2015-05-09 07:05:59
回答 4查看 32.2K关注 0票数 21

我写的yaml文件是这样的

代码语言:javascript
复制
with open(fname, "w") as f:
     yaml.safe_dump({'allow':'', 'deny': ''}, f,
                    default_flow_style=False, width=50, indent=4)

这将输出以下内容:

代码语言:javascript
复制
allow: ''

我想输出为

代码语言:javascript
复制
allow:

我该怎么做呢?

EN

回答 4

Stack Overflow用户

发布于 2018-12-20 19:43:45

对于要从python读取的None类型,请在yaml中使用null

一个像这样的YAML文件test.yml

代码语言:javascript
复制
foo: null
bar: null

将由python读取为

代码语言:javascript
复制
import yaml
test = yaml.load(open('./test.yml'))
print(test)

foo: None
bar: None
票数 42
EN

Stack Overflow用户

发布于 2015-05-09 13:59:49

如果您加载YAML src

代码语言:javascript
复制
allow:

在Python中,你可以将None赋值给键allow,这是正确的行为。

如果您使用ruamel.yaml (我是它的作者),并且它是RoundTripDumper,那么None就是您想要的(这是IMO最具可读性的,尽管不明确):

代码语言:javascript
复制
import ruamel.yaml

print ruamel.yaml.dump(dict(allow=None), Dumper=ruamel.yaml.RoundTripDumper)

将为您提供:

代码语言:javascript
复制
allow:

您还可以正确地往返执行以下操作:

代码语言:javascript
复制
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))

要获取输出,请执行以下操作:

代码语言:javascript
复制
#### 1
None
#### 2
allow:
key2: Hello  # some test


#### 3
<class 'ruamel.yaml.comments.CommentedMap'>

在上面的代码中,data是ordereddict的子类,这对于跟踪输入的流样式、处理附加到行的注释、键的顺序等是必要的。

这样的子类可以动态创建,但通常更容易从一些可读的和格式良好的YAML代码(可能已经保存在磁盘上)开始,然后更新/扩展这些值。

票数 10
EN

Stack Overflow用户

发布于 2016-05-26 02:36:06

代码语言:javascript
复制
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本身中。上面的代码将生成一个包含以下内容的文件:

代码语言:javascript
复制
allow:
deny:
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30134110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档