首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python打开/加载yaml文件更改值(数字?)如果它们包含冒号:并在冒号后面少于3位数

Python打开/加载yaml文件更改值(数字?)如果它们包含冒号:并在冒号后面少于3位数
EN

Stack Overflow用户
提问于 2022-10-07 14:14:24
回答 2查看 43关注 0票数 0

简单example.yml文件

代码语言:javascript
运行
复制
Base:
    StartTime: 645:0
    EndTimes: 645:023
    MidTimes: 645:02
    mac: 99:19:b9:fa:37:99
    MissionStartTimestamp: -2037:14522
    MissionEndTimestamp: -2037:14522

当它加载到python中时

代码语言:javascript
运行
复制
import yaml

with open("example.yml", 'r') as file:
    example_ = yaml.safe_load(file)
print(yaml.dump(example_, default_flow_style=False))

结果:

代码语言:javascript
运行
复制
Base:
  EndTimes: 645:023
  MidTimes: 38702
  MissionEndTimestamp: -2037:14522
  MissionStartTimestamp: -2037:14522
  StartTime: 38700
  mac: 99:19:b9:fa:37:99

无论出于什么原因,任何带有两个或更少尾随数字的冒号的“数字”值都会转换为另一个“数字”.

也曾尝试过:

代码语言:javascript
运行
复制
import yaml

with open("example.yml", 'r') as file:
    example_ = yaml.load(file, Loader=yaml.CLoader)
print(yaml.dump(example_, default_flow_style=False))

相同的结果( Loader=yaml.CSafeLoaderCFullLoaderCUnsafeLoader)

另一个加载程序有不同的结果,CBaseLoader将其转换为一个单引号字符串:

代码语言:javascript
运行
复制
Base:
  EndTimes: 645:023
  MidTimes: '645:02'
  MissionEndTimestamp: -2037:14522
  MissionStartTimestamp: -2037:14522
  StartTime: '645:0'
  mac: 99:19:b9:fa:37:99

看起来CBaseLoader是最好的,但是添加单引号不是很好,现在必须添加另一步来去掉这些引号.有办法绕过这事吗?使其作为其他值加载。

UPDATE#1

基于@ubaumann的回答,我添加了以下内容。

安装ruamel.yaml - conda install -c conda-forge ruamel.yamlpip install ruamel.yaml

更改文件头信息

代码语言:javascript
运行
复制
import sys
from ruamel.yaml import YAML
yaml=YAML(typ="rt")

和打开/转储调用

代码语言:javascript
运行
复制
with open("example.yml", 'r') as file:
    example_ = yaml.load(file)
yaml.dump(example_, sys.stdout)

结果

代码语言:javascript
运行
复制
Base:
  StartTime: 645:0000
  EndTimes: 645:023
  MidTimes: 645:02
  mac: 99:19:b9:fa:37:99
  MissionStartTimestamp: -2037:14522
  MissionEndTimestamp: -2037:14522

如果您将行yaml=YAML(typ="rt")修改为yaml=YAML(typ="safe"),您将得到字符串中的所有字符串:

代码语言:javascript
运行
复制
Base: {EndTimes: '645:023', MidTimes: '645:02', MissionEndTimestamp: '-2037:14522',
  MissionStartTimestamp: '-2037:14522', StartTime: '645:0000', mac: '99:19:b9:fa:37:99'}
EN

Stack Overflow用户

发布于 2022-10-07 14:38:33

YAML整数可以用不同的格式格式化,使用:可以将其解释为六进制(基数为60)。

https://yaml.org/type/int.html

使用“:”的

允许以基数60表示整数,这便于时间和角度值

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73988503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档