我正在尝试使用 PyYAML 读取 yml 配置文件。请参阅下面此类文件的示例。所需字段可能包含特殊字符,例如\xc2\xb0。下面示例中的结果字符串不是所需的\xc2\xb0C,而是\xc3\x82\xc2\xb0C.
目标只是阅读\xc2\xb0C。我可以控制配置文件,因此转义或引用不是问题。之后也可以进行解码、替换或其他操作,但它们也应该适用于没有特殊字符的字符串和具有其他特殊字符的字符串。
然而到目前为止,我在这条路上还没有取得成功。
\n\n测试.yml
\n\nsuper_important_variable: \xc2\xb0C\nRun Code Online (Sandbox Code Playgroud)\n\n代码
\n\nimport yaml\nwith open(\'test.yml\', \'r\') as open_yml:\n print(yaml.safe_load(open_yml))\nRun Code Online (Sandbox Code Playgroud)\n\n当前结果
\n\n{\'super_important_variable\': \'\xc3\x82\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n\n期望的结果
\n\n{\'super_important_variable\': \'\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n\n奇怪的是,这会返回正确的结果:
\n\nimport yaml\nyml_str = "super_important_variable: \xc2\xb0C"\nyaml.safe_load(yml_str)\n\n> {\'super_important_variable\': \'\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n 我有以下 yaml 文件:
config:
username: admin
password: ${SERVICE_PASSWORD}
service: https://${SERVICE_HOST}/service
Run Code Online (Sandbox Code Playgroud)
如何从环境中加载密码和主机值?
我有一个任务。我需要编写 python 代码来为 kubernetes 生成 yaml 文件。到目前为止我一直在使用 pyyaml 并且效果很好。这是我生成的 yaml 文件:
apiVersion: v1
kind: ConfigMap
data:
info:
name: hostname.com
aio-max-nr: 262144
cpu:
cpuLogicalCores: 4
memory:
memTotal: 33567170560
net.core.somaxconn: 1024
...
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试创建此 configMap 时,错误是 info 需要 string() 而不是地图。所以我探索了一下,解决这个问题的最简单方法似乎是在信息后面添加一个管道,如下所示:
apiVersion: v1
kind: ConfigMap
data:
info: | # this will translate everything in data into a string but still keep the format in yaml file for readability
name: hostname.com
aio-max-nr: 262144
cpu:
cpuLogicalCores: 4
memory:
memTotal: 33567170560
net.core.somaxconn: 1024
...
Run Code Online (Sandbox Code Playgroud)
这样我的configmap就创建成功了。我的苦恼是我不知道如何从 python 代码中添加管道栏。这里我手动添加了它,但我想自动化整个过程。 …
我有一个数据结构(从YAML文档创建),如下所示:
{
'SD_TX_EN_CFG[5]': {'Bits': {0: 'ENTX // 0 = Disabled, 1 = Enabled'}, 'Name': 'TX Enable Register (Link 5)', 'Offset': 43024},
'SD_TX_EN_CFG[4]': {'Bits': {0: 'ENTX // 0 = Disabled, 1 = Enabled'}, 'Name': 'TX Enable Register (Link 4)', 'Offset': 40976},
'SD_RX_EN_CFG[5]': {'Bits': {0: 'ENRX // 0 = Disabled, 1 = Enabled'}, 'Name': 'RX Enable Register (Link 5)', 'Offset': 43008},
'SD_RX_EN_CFG[3]': {'Bits': {0: 'ENRX // 0 = Disabled, 1 = Enabled'}, 'Name': 'RX Enable Register (Link 3)', 'Offset': 38912},
'SD_RX_EN_CFG[2]': {'Bits': …Run Code Online (Sandbox Code Playgroud) 所以我有一个yaml文件,包含许多琐事问题和答案列表.但是,每当我尝试加载此文件并使用pyyaml将内容转储到python中时,它会向后转储它们.我不确定这是我的yaml文件还是我的库有问题.
假设我的一个问题/答案对在yaml文件中看起来像这样 -
{"question": "What is the name of this sequence of numbers: 1, 1, 2, 3, 5, 8, 13, ...",
"answer": ["The Fibonacci Sequence", "The Padovan Sequence", "The Morris Sequence"]}
Run Code Online (Sandbox Code Playgroud)
当我在那个python字典上使用yaml.dump()时,它转储了这个 -
answer: [fibonacci, padovan, morris]\nquestion: 'what sequence is this: 1, 1, 2, 3, 5, 8, 13, ...'\n"
Run Code Online (Sandbox Code Playgroud)
我在期待这个 -
- question: "What is the name of this sequence of numbers: 1, 1, 2, 3, 5, 8, 13, ..."
answer: ["The Fibonacci Sequence", "The Padovan Sequence", "The Morris Sequence"] …Run Code Online (Sandbox Code Playgroud) 对不起,我对YAML和PyYAML都知之甚少,但我很同意支持以"Jekyll"使用的相同风格编写的配置文件的想法(http://jekyllrb.com/docs/frontmatter/)AFAIK有这些"YAML Front Matter"积木,对我来说看起来非常酷和性感.
所以我在我的计算机上安装了PyYAML,并用这个文本块写了一个小文件:
---
First Name: John
Second Name: Doe
Born: Yes
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用此代码使用Python 3.4和PyYAML读取此文本文件:
import yaml
stream = open("test.yaml")
a = stream.read()
b = yaml.load(a)
Run Code Online (Sandbox Code Playgroud)
但显然它不起作用,Python显示此错误消息:
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
b = yaml.load(a) …Run Code Online (Sandbox Code Playgroud) 我想收到以下 YAML 文件:
---
classes:
- apache
- ntp
apache::first: 1
apache::package_ensure: present
apache::port: 999
apache::second: 2
apache::service_ensure: running
ntp::bla: bla
ntp::package_ensure: present
ntp::servers: '-'
Run Code Online (Sandbox Code Playgroud)
解析后,我收到这样的输出:
---
apache::first: 1
apache::package_ensure: present
apache::port: 999
apache::second: 2
apache::service_ensure: running
classes:
- apache
- ntp
ntp::bla: bla
ntp::package_ensure: present
ntp::servers: '-'
Run Code Online (Sandbox Code Playgroud)
在这里,我找到了赋予文档样式可能性的属性。我试图设置 line_break 和 indent,但它不起作用。
with open(config['REPOSITORY_PATH'] + '/' + file_name, 'w+') as file:
yaml.safe_dump(data_map, file, indent=10, explicit_start=True, explicit_end=True, default_flow_style=False,
line_break=1)
file.close()
Run Code Online (Sandbox Code Playgroud)
请给我建议设置输出样式的简单方法。
我使用了 YAML 文件并将 PyYAML 导入到我的项目中。
该代码在 PyCharm 中运行良好,但是在创建 Egg 并运行 Egg 时会出现错误,因为在命令提示符上找不到模块。
我正在尝试加载 jinja2 格式的 yaml 文件并“评估”/“渲染”模板。在这里,举个例子:
{% set name = "pyexcel-ezodf" %}
{% set version = "0.3.3" %}
package:
name: {{ name|lower }}
version: {{ version }}
Run Code Online (Sandbox Code Playgroud)
我希望能够加载 yaml 文件并表示 yaml['package']['version']=0.3.3
我必须尝试 ruamel YAML,但它不评估版本,只给我一个包。
这里是Python代码:
yaml = YAML(typ='jinja2')
yaml.allow_duplicate_keys = True
yaml.explicit_start = True
yaml_content = yaml.load(content)
print (yaml_content['package'])
Run Code Online (Sandbox Code Playgroud) 我有一个 YAML 文件,我需要将它导入到 python,以某种方式处理它,然后再次导出为 YAML 文件。更准确地说,我将 YAML 配置文件作为字典导入,生成许多带有更改参数的文件,然后再次将它们全部写入 YAML 文件。
我面临的问题是在它们之前有带有特殊字符($、&)的参数:例如 *target_size。
当我在 python 中使用 dict 时,此参数是字符串格式 ('*target_size') 的字典值。当我写这个字典时 YAML 文件格式得到保留,即 '*target_size' 在生成的 YAML 文件中被引号包围。我需要的只是 *target_size,与原始文件中的相同。
我查看了 pyYaml 文档和其他资源,但没有找到解决方案。
编写 YAML 文件的代码:
with open(f'{PATH}/base_config.yml', 'w') as outfile:
yaml.dump(config, outfile, default_flow_style=False, sort_keys=False)
Run Code Online (Sandbox Code Playgroud)
我在我的 azure Devop 管道上遇到以下错误,它似乎与参数循环有关,但尽管以多种不同的方式编写脚本,我似乎无法摆脱它。YAML 验证器和我的 YAML linter 未检测到问题。
/azure-pipelines.yml (Line: 1, Col: 12): Unexpected value ''
下面是我的代码,它也使用了一个模板,我将把它包含在它下面。
azure-pipelines.yml
parameters:
steps:
- ${{ each project in parameters.projects }}:
- task: UsePythonVersion@0
displayName: 'Setting python version to 3.7'
inputs:
versionSpec: '3.7'
architecture: 'x64'
- script: |
pushd '$(System.DefaultWorkingDirectory)/${{ project }}'
pip install -r requirements.txt
displayName: 'Install prerequisites'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)/${{ project }}'
includeRootFolder: false
archiveFile: '$(System.DefaultWorkingDirectory)/${{ project }}.zip'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/${{ project }}.zip' …Run Code Online (Sandbox Code Playgroud) yaml azure pyyaml azure-pipelines-release-pipeline azure-pipelines-yaml
好吧,我正在玩pyYAML.我使用Windows安装程序安装了Python 2.7的版本.
它进口很好:
import yaml
Run Code Online (Sandbox Code Playgroud)
并且它不会抛出任何错误.
但是,如果我这样做:
import yaml
f = open("sets.yml")
dataMap = yaml.load(f)
f.close()
print dataMap
Run Code Online (Sandbox Code Playgroud)
它抛出一个属性错误,并说'module'对象没有属性'load'.
我尝试了转储,并得到了相同的东西.导入的内容也是如此:
from yaml import load
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
哦,而且,我认为这很奇怪 - 每当我运行脚本时,它就会创建一个.pyc.这是为什么?
我尝试使用 aws codeBuild 运行 Buildspec 并尝试使用 jq 命令即时生成 process.json 文件。但它在执行时出错并且构建失败。
build:
commands:
- cp $CODEBUILD_SRC_DIR/qe/performance/* apache-jmeter-5.2/bin/
- cd apache-jmeter-5.2/bin/
- DATE=`date "+%Y%m%d-%H-%M-%S"`
- aws s3 cp $DATE-Report s3://$JMeterScanResultBucket/${ProjectName}/$DATE --recursive
- jq -n --arg appname "$appname" '{apps: [ {project: wsg, issuetype: "Test Execution", summary: "Test Execution for junit Execution"}]}' > process.json
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:第 20 行转到上面的“jq”命令
DOWNLOAD_SOURCE
Failed
YAML_FILE_ERROR: did not find expected key at line 20
Run Code Online (Sandbox Code Playgroud) pyyaml ×13
python ×8
yaml ×8
dictionary ×2
python-3.x ×2
azure ×1
azure-pipelines-release-pipeline ×1
config ×1
configmap ×1
importerror ×1
jinja2 ×1
json ×1
kubernetes ×1
pycharm ×1
python-2.7 ×1
ruamel.yaml ×1
sorting ×1
windows ×1