我希望能够转储一个字典,其中包含我希望在块样式中具有的长字符串以便于阅读.例如:
foo: |
this is a
block literal
bar: >
this is a
folded block
Run Code Online (Sandbox Code Playgroud)
PyYAML支持使用这种样式加载文档,但我似乎找不到以这种方式转储文档的方法.我错过了什么吗?
我有一个python项目,我想使用YAML(pyYaml 3.11),特别是因为它"非常"且用户可以在必要时在文本编辑器中轻松编辑.但问题是,如果我将YAML带入python应用程序(我将需要)并编辑内容(因为我需要),那么编写新文档通常不如我开始时那么漂亮.
pyyaml文档非常差 - 甚至没有将参数记录到转储函数.我找到了http://dpinte.wordpress.com/2008/10/31/pyaml-dump-option/.但是,我仍然缺少我需要的信息.(我开始查看源代码,但它似乎并不是最吸引人的.如果我没有得到解决方案,那么这是我唯一的办法.)
我从一个看起来像这样的文档开始:
- color green :
inputs :
- port thing :
widget-hint : filename
widget-help : Select a filename
- port target_path :
widget-hint : path
value : 'thing'
outputs:
- port value:
widget-hint : string
text : |
I'm lost and I'm found
and I'm hungry like the wolf.
加载到python(yaml.safe_load(s))后,我尝试了几种方法将其转储出来:
>>> print yaml.dump( d3, default_flow_style=False, default_style='' )
- color green:
inputs:
- port thing:
widget-help: Select a filename
widget-hint: filename
- port target_path: … 我有以下YAML文件:
---
my_vars:
my_env: "dev"
my_count: 3
Run Code Online (Sandbox Code Playgroud)
当我用PyYAML读取它并再次转储它时,我得到以下输出:
---
my_vars:
my_env: dev
my_count: 3
Run Code Online (Sandbox Code Playgroud)
有问题的代码:
with open(env_file) as f:
env_dict = yaml.load(f)
print(yaml.dump(env_dict, indent=4, default_flow_style=False, explicit_start=True))
Run Code Online (Sandbox Code Playgroud)
我尝试使用default_style参数:
with open(env_file) as f:
env_dict = yaml.load(f)
print(yaml.dump(env_dict, indent=4, default_flow_style=False, explicit_start=True, default_style='"'))
Run Code Online (Sandbox Code Playgroud)
但现在我得到:
---
"my_vars":
"my_env": "dev"
"my_count": !!int "3"
Run Code Online (Sandbox Code Playgroud)
在不对 YAML文件中的变量名做任何假设的情况下,我需要做什么来保持原始格式?
这是一个配置文件,我使用 PyYAML 从中更改了一些值,然后我编写了一些配置,但它会更改我的格式,这让我感到困惑。
$ results.yaml
nas:
mount_dir: '/nvr'
mount_dirs: ['/mount/data0', '/mount/data1', '/mount/data2']
# yaml.py
import yaml.py
conf = open("results.conf", "r")
results = yaml.load(conf)
conf.close()
result['nas']['mount_dirs'][0]= "haha"
with open('/home/zonion/speedio/speedio.conf', 'w') as conf:
yaml.dump(speedio, conf, default_flow_style=False)
conf.close()
Run Code Online (Sandbox Code Playgroud)
但它改变了我的格式,我该怎么办?
# cat results.conf
nas:
mount_dir: /nvr
mount_dirs:
- haha
- /mount/data1
- /mount/data2
Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何方法可以使用python中的json格式化一些对象的结果字符串.例如,假设我有以下字典:
{'a': 12.73874, 'b': 1.74872, 'c': 8.27495}
Run Code Online (Sandbox Code Playgroud)
并且json编码的结果是:
{
"c": 8.27495,
"b": 1.74872,
"a": 12.73874
}
Run Code Online (Sandbox Code Playgroud)
而我想要的结果是:
{
"a": 12.74,
"c": 8.28,
"b": 1.75
}
Run Code Online (Sandbox Code Playgroud)
注意元素的顺序和每个数字的小数位.有没有办法做到这一点?
提前致谢!