我正在使用YAML作为计算机和人类可编辑和可读的模拟器输入格式.对于人类可读性,输入的某些部分主要适合于阻止样式,而流动样式更适合其他部分.
PyYAML的默认设置是在嵌套地图或序列的任何地方使用块样式,在其他任何地方使用流样式.*default_flow_style*允许选择all-flow-style或all-block-style.
但我想输出更多的表格文件
bonds:
- { strength: 2.0 }
- ...
tiles:
- { color: red, edges: [1, 0, 0, 1], stoic: 0.1}
- ...
args:
block: 2
Gse: 9.4
Run Code Online (Sandbox Code Playgroud)
可以看出,这并不是贯穿整个样式的一致模式,而是根据文件的部分而改变.本质上,我希望能够指定某些块样式序列中的所有值都是流式样.有没有办法对转储进行那种精细级别的控制?能够以特定顺序转储顶级映射而不需要该顺序(例如,omap)对于可读性而言将是好的.
我正在使用yaml.safe_load()但我需要忽略标签!v2- 有没有办法做到这一点但仍然使用safe_load()?
标题相当不言自明.
当我将元组保存到YAML文件时,我得到的内容如下所示:
ambient: !!python/tuple [0.3, 0.3 ,0.3]
Run Code Online (Sandbox Code Playgroud)
当我尝试使用yaml.safe_load(file_object)加载它时,我不断收到如下错误:
yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:python/tuple'
Run Code Online (Sandbox Code Playgroud)
需要做什么?
我需要在项目中使用 YAML。我有一个 YAML 文件,我用它来填充与数据交互的 Python 程序中的列表。
我的数据如下所示:
Employees:
custid: 200
user: Ash
- Smith
- Cox
Run Code Online (Sandbox Code Playgroud)
我需要 python 代码来迭代这个 YAML 文件并填充这样的列表:
list_of_Employees = ['Ash', 'Smith' 'Cox']
Run Code Online (Sandbox Code Playgroud)
我知道我必须打开文件,然后将数据存储在一个变量中,但我无法弄清楚如何在列表中分别输入每个元素。理想情况下,我想使用 append 函数,这样我就不必每次都确定我的“用户”大小。
我想要一个 YAML 配置文件,用于我的 Python 脚本的某些分析设置。YAML 文件看起来像这样:
settings:
param1: 1
param2: two
...
Run Code Online (Sandbox Code Playgroud)
在我的 Python 脚本中,我想将这些值作为关键字参数传递给函数。加载 YAML 文件会为我提供一本字典。该函数只有关键字参数,我事先不知道配置文件将具有哪些关键字参数。该函数看起来像这样:
def process(param1=None, param2=None, param3=None):
...
Run Code Online (Sandbox Code Playgroud)
请注意,YAML 设置的名称与关键字参数名称相同。该函数有几个可能的关键字参数,而配置文件可能只有一两个。显然,我想将值分配给正确的关键字参数。
如何将 YAML 值(和/或字典)分配给它们的关键字参数分配?
使用PyYAML,如果我在dict中读入包含空值的文件:
test_str = '''
attrs:
first:
second: value2
'''
Run Code Online (Sandbox Code Playgroud)
这将返回None密钥first:
>>> data = yaml.load(test_str)
>>> data
{'attrs': {'second': 'value2', 'first': None}}
Run Code Online (Sandbox Code Playgroud)
但在写作时,该None值将替换为null:
>>> print(yaml.dump(data, default_flow_style=False))
attrs:
first: null
second: value2
Run Code Online (Sandbox Code Playgroud)
有没有办法格式化转储输出以打印空白标量而不是null?
我正在从 YAML 文件加载 yaml True/False 项目(下面的示例)。
gzip: False
Run Code Online (Sandbox Code Playgroud)
这在 Jinja2 模板中被正确解释为布尔值 True。
另一个脚本正在读取同一个 YAML 文件,将其作为 python CGI 表单数据传递,并最终使用以下命令写入 YAML 文件
with open(myyaml, 'w') as yaml_file:
yaml_file.write(yaml.dump(dict, default_flow_style=False))
Run Code Online (Sandbox Code Playgroud)
问题是,这会用单引号写入 True/False
gzip: 'False'
Run Code Online (Sandbox Code Playgroud)
这会导致 jinja2 模板不将值解释为布尔值,并且始终将值设置为 true
{{ if gzip }}
Run Code Online (Sandbox Code Playgroud)
有没有办法转储带有 True/False 值的 YAML 文件,这些值被视为布尔值(我的意思是不带引号)。
我正在尝试调试一个问题,它归结为......
>>> import yaml as pyyaml
>>> import ruamel.yaml as ruamel
>>> ruamel.load("x: yes") == ruamel.load("x: true")
False
>>> pyyaml.safe_load("x: yes") == pyyaml.safe_load("x: true")
True
Run Code Online (Sandbox Code Playgroud)
互联网上有传言称“yes”和“no”是保留词,分别是和 的同义词。truefalse
但 1.1 规范中只是顺便提及,但没有详细说明,并且字符串“yes”根本没有出现在1.2 规范中。
事实上,仔细查看规范的每个草案,它只会以合法的方式以任何合法的方式出现在https://yaml.org/spec/history/2002-09-01.html中,并在之后的修订中被删除。
我怀疑我在写它的过程中已经回答了我自己的问题,但是......这个关于“是/否”的事情只是胡说八道吗?它进入了实现(我的编辑甚至强调“是/否”作为特殊),或者我误解或遗漏了规范的一部分?
我正在尝试读取包含该标签的 YAML 文件!vault。我收到错误:
无法确定标签“!vault”的构造函数
在阅读了几篇博客后,我了解到我需要指定一些构造函数来解决此问题,但我不清楚如何做到这一点。
import yaml
from yaml.loader import SafeLoader
with open('test.yml' ) as stream:
try:
inventory_info = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
User = inventory_info['all']['children']['linux']['vars']['user']
key = inventory_info['all']['children']['linux']['vars']['key_file']
Run Code Online (Sandbox Code Playgroud)
我正在使用的 YAML 文件:
all:
children:
rhel:
hosts: 172.18.144.98
centos:
hosts: 172.18.144.98
linux:
children:
rhel:
centos:
vars:
user: "o9ansibleuser"
key_file: "test.pem"
ansible_password: !vault |
$ANSIBLE_VAULT;2.1;AES256
3234567899353936376166353
Run Code Online (Sandbox Code Playgroud) 我刚拿到一台MacBook,克隆了我正在做的项目,然后去设置python环境。创建环境后,我更新了 pip 并尝试使用pip install -r requirements.txt. 给我带来问题的 3 个库是cltk、PyYAML和stanza。
这是执行后给我的pip install -r requirements.txt:
Collecting PyYAML==5.4.1 (from -r requirements.txt (line 56))\n Using cached PyYAML-5.4.1.tar.gz (175 kB)\n Installing build dependencies ... done\n Getting requirements to build wheel ... error\n error: subprocess-exited-with-error\n \n \xc3\x97 Getting requirements to build wheel did not run successfully.\n \xe2\x94\x82 exit code: 1\n \xe2\x95\xb0\xe2\x94\x80> [62 lines of output]\n running egg_info\n writing lib3/PyYAML.egg-info/PKG-INFO\n writing dependency_links to lib3/PyYAML.egg-info/dependency_links.txt\n writing …Run Code Online (Sandbox Code Playgroud) pyyaml ×10
python ×8
yaml ×6
jinja2 ×1
list ×1
macos ×1
pip ×1
pyenv ×1
python-3.x ×1
ruamel.yaml ×1
setuptools ×1