我有一个YAML配置,看起来像:
config:
- id: foo
- name: bar
content:
- run: xxx
- remove: yyy
Run Code Online (Sandbox Code Playgroud)
我正在使用Python YAML模块加载它,但我希望以更好的方式访问它,如:
stream = open(filename)
config = load(stream, Loader=Loader)
print(config['content'])
Run Code Online (Sandbox Code Playgroud)
我想要的是能够做到:print(config.content).
我正在尝试建立一个系统,我有一些(可能更多)yaml文件将用于配置.我希望能够在另一个文件中引用一些文件.
我知道YAML不允许这样做.
我认为,我的计划是将两个YAML文件合并,然后将其视为单个文件.我很确定我可以将两个文件放在一起,创建一个临时文件,然后将其作为YAML读取,或者将文件作为文本读取,连接它们然后解析字符串.
但是,我觉得应该有更好的方法来做到这一点.在那儿?
一些包是使用与 PyPI 上包的名称不同的字符串导入的,例如:
$ pip list | grep -i "yaml\|qt"
PyYAML 3.13
QtPy 1.5.2
Run Code Online (Sandbox Code Playgroud)
一些工具无法处理,例如 sphinx:
$ make html
WARNING: autodoc: failed to import module 'wireshark' from module 'logcollector.plugins'; the following exception was raised:
No module named 'qtpy'
Run Code Online (Sandbox Code Playgroud)
我现在不记得了,但是对于扫描requirements.txt文件并打印yaml未安装包的警告的工具也是如此(但它是,它的名称是 pyyaml)。
我正在尝试用 Python 读取 YAML 文件,但由于路径中的“\”,它认为该文件是十六进制数,因此失败,这是我的代码
import yaml
def parse_yaml(file_path):
with open(file_path) as stream:
yaml_dict = None
try:
yaml_dict = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
return yaml_dict
file_path = r"C:\\Users\\user\\PycharmProjects\\testautomation\\conf_windows\\generic_configs.yml"
print(parse_yaml(file_path))
Run Code Online (Sandbox Code Playgroud)
错误信息:
Error
while scanning a double-quoted scalar
in "C:\\Users\\user\\PycharmProjects\\testautomation\\conf_windows\\generic_configs.yml", line 2, column 16
expected escape sequence of 8 hexdecimal numbers, but found 's'
in "C:\\Users\\user\\PycharmProjects\\testautomation\\conf_windows\\generic_configs.yml", line 2, column 21
None
Run Code Online (Sandbox Code Playgroud)
我尝试用正斜杠和反斜杠给出路径。甚至尝试使用 os.path 但没有任何效果。相同的代码在 Mac 上运行良好,但在 Windows 上失败。
yaml 文件内容
batchwrite:
input_file : "/Users/user/Documents/Codes/testautomation/input/batch_write_input.xlsx"
output_path : "/Users/user/Documents/Codes/testautomation/output"
dml_file : "/Users/user/Documents/Codes/testautomation/conf/info.dml" …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我创建了net_plan_dict变量字典并将其转换为 YAML 格式文件。在字典中,我有一个名为的字段addresses,它是一个由三个元素组成的数组。创建 YAML 文件后,三个数组元素未放置在该addresses字段下:
import yaml
net_plan_dict = {
'networking': {
'addresses': ['192.168.1.1', '192.168.1.2', "192.168.1.3"],
'gateway4': '192.168.121.1'
}
}
with open("new.yaml", "w") as f:
yaml.dump(net_plan_dict, f)
Run Code Online (Sandbox Code Playgroud)
上述代码的输出如下(在下面的文件中,IP不在地址下方,并且没有空格或缩进)。
新的.yaml:
networking:
addresses:
- 192.168.1.1 <-------- does not have indent
- 192.168.1.2
- 192.168.1.3
gateway4: 192.168.121.1
Run Code Online (Sandbox Code Playgroud)
但我的目标是获取此输出文件(当 ips 位于地址字段下时如何创建此文件):
networking:
addresses:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
gateway4: 192.168.121.1
Run Code Online (Sandbox Code Playgroud) 我无法找到将 YAML 转储到 ruamel.yaml 中的变量的方法。使用 PyYAML,我可以实现如下所示的相同效果:
with open('oldPipeline.yml','r') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
a = yaml.dump(data)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试同样的操作时ruamel.yaml,它会抛出异常TypeError: Need a stream argument when not dumping from context manager
我有这段代码:
config_object = yaml.safe_load(config_string)
print("passed config: {}".format(config_object))
^^ prints expected yaml structure
print("deserialized config object type: {}".format(type(config_object)))
^^ prints deserialized config object type: <class 'str'>
value = config_object["field1"]["field2"]["field3"]
^^ Error: string indices must be integers
Run Code Online (Sandbox Code Playgroud)
我的 yaml 配置:
---
field1:
field2:
field3: value
field4: value
...
Run Code Online (Sandbox Code Playgroud)
我不明白为什么返回字符串。我在这里没有看到任何字符串返回类型:https ://pyyaml.org/wiki/PyYAMLDocumentation
我正在尝试使用 python 解析 helm 图表 YAML 文件。该文件包含一些花括号,这就是我无法解析 YAML 文件的原因。
示例 YAML 文件
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.nginx.name }}-config-map
labels:
app: {{ .Values.nginx.name }}-config-map
data:
SERVER_NAME: 12.121.112.12
CLIENT_MAX_BODY: 500M
READ_TIME_OUT: '500000'
Run Code Online (Sandbox Code Playgroud)
基本上,我不知道如何忽略右侧存在的值。
谢谢你,
我正在使用SetupTools 构建我自己的包。在 INSTALL_REQUIRES 中setup.py我有以下依赖项:
...
INSTALL_REQUIRES = [
'ray>=0.8.7',
'pyyaml>=5.3',
]
setup(name=PACKAGE_NAME,
version=VERSION,
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
long_description_content_type=LONG_DESC_TYPE,
author=AUTHOR,
license=LICENSE,
author_email=AUTHOR_EMAIL,
url=URL,
install_requires=INSTALL_REQUIRES,
packages=find_packages()
)
Run Code Online (Sandbox Code Playgroud)
当我运行时pip3 install -i https://test.pypi.org/simple/ r3po==0.0.6,出现以下错误:
ERROR: Could not find a version that satisfies the requirement pyyaml>=5.3 (from r3po==0.0.6) (from versions: 3.11)
ERROR: No matching distribution found for pyyaml>=5.3 (from r3po==0.0.6)
Run Code Online (Sandbox Code Playgroud)
然而,pip3 search pyyaml它告诉我 PyYAML 肯定存在:
PyYAML (5.3.1) - YAML parser and emitter for Python
并且pip3 install pyyaml(在 …
Python框架FastAPI支持.env样式的配置文件。它可以使用更结构化的配置格式,例如 .yaml 到 ini/toml 吗?
pyyaml ×10
python ×8
python-3.x ×5
yaml ×4
fastapi ×1
kubernetes ×1
pip ×1
pycharm ×1
qtpy ×1
ruamel.yaml ×1
setup.py ×1