标签: pyyaml

如何加载pyYAML文件并使用属性而不是使用字典表示法来访问它?

我有一个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).

python yaml pyyaml

6
推荐指数
1
解决办法
4968
查看次数

PyYaml结合了两个yaml文件

我正在尝试建立一个系统,我有一些(可能更多)yaml文件将用于配置.我希望能够在另一个文件中引用一些文件.

我知道YAML不允许这样做.

我认为,我的计划是将两个YAML文件合并,然后将其视为单个文件.我很确定我可以将两个文件放在一起,创建一个临时文件,然后将其作为YAML读取,或者将文件作为文本读取,连接它们然后解析字符串.

但是,我觉得应该有更好的方法来做到这一点.在那儿?

python yaml pyyaml

6
推荐指数
1
解决办法
4867
查看次数

为什么某些 Python 包名称与其导入名称不同?

一些包是使用与 PyPI 上包的名称不同的字符串导入的,例如:

$ pip list | grep -i "yaml\|qt"  
PyYAML      3.13               
QtPy        1.5.2
Run Code Online (Sandbox Code Playgroud)
  • pyyaml (pip install pyyaml),但导入 yaml
  • qtpy (pip install qtpy),是的,导入是 qtpy 但包是 QtPy

一些工具无法处理,例如 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 pip pyyaml python-sphinx qtpy

6
推荐指数
2
解决办法
1647
查看次数

YAML 加载器将路径视为十六进制数

我正在尝试用 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)

python yaml pyyaml pycharm python-3.x

6
推荐指数
1
解决办法
2856
查看次数

PyYAML 中的数组没有缩进或空格

在下面的代码中,我创建了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)

python pyyaml python-3.x

6
推荐指数
1
解决办法
3249
查看次数

将 yaml 转储到变量,而不是使用 ruamel.yaml 将其流式传输到 stdout

我无法找到将 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

pyyaml python-3.x ruamel.yaml

6
推荐指数
1
解决办法
7240
查看次数

yaml.safe_load 返回字符串而不是对象

我有这段代码:

    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

pyyaml python-3.x

6
推荐指数
2
解决办法
6249
查看次数

如何使用python解析helm图表yaml文件

我正在尝试使用 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)

基本上,我不知道如何忽略右侧存在的值。

谢谢你,

python yaml pyyaml kubernetes kubernetes-helm

6
推荐指数
1
解决办法
3814
查看次数

找不到满足 pyyaml&gt;=5.3 要求的版本,但 PyYAML 版本为 5.3.1

我正在使用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 setup.py pyyaml python-3.x

6
推荐指数
1
解决办法
1万
查看次数

FastAPI 是否支持具有嵌套结构(如 yaml)的配置文件?

Python框架FastAPI支持.env样式的配置文件。它可以使用更结构化的配置格式,例如 .yaml 到 ini/toml 吗?

python pyyaml fastapi

6
推荐指数
1
解决办法
3058
查看次数