You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python加载YAML文件时含单冒号短后缀数值异常转换问题咨询

Python加载YAML时带单冒号的特殊格式解析问题

在Python中加载YAML文件时,发现带单个冒号且冒号后数字不超过2位的内容会被自动转换为其他数值,而冒号后数字≥3位的内容则能正常保留格式。以下是具体测试过程:

示例YAML文件(example.yml)

Base:
    StartTime: 645:0
    EndTimes: 645:023
    MidTimes: 645:02
    mac: 99:19:b9:fa:37:99
    MissionStartTimestamp: -2037:14522
    MissionEndTimestamp: -2037:14522

使用PyYAML测试

代码及默认加载结果

import yaml

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

输出结果:

Base:
  EndTimes: 645:023
  MidTimes: 38702
  MissionEndTimestamp: -2037:14522
  MissionStartTimestamp: -2037:14522
  StartTime: 38700
  mac: 99:19:b9:fa:37:99

可以看到,StartTime(645:0)、MidTimes(645:02)被转换为数值,而EndTimes(645:023)等冒号后数字≥3位的内容正常保留。

尝试指定Loader为CLoader、CSafeLoader、CFullLoader、CUnsafeLoader,结果与上述一致。

使用CBaseLoader的结果

改用CBaseLoader时,这类内容会被转为带单引号的字符串,但需要额外步骤去除引号:

Base:
  EndTimes: 645:023
  MidTimes: '645:02'
  MissionEndTimestamp: -2037:14522
  MissionStartTimestamp: -2037:14522
  StartTime: '645:0'
  mac: 99:19:b9:fa:37:99

使用ruamel.yaml测试

先安装ruamel.yaml:

conda install -c conda-forge ruamel.yaml
# 或
pip install ruamel.yaml

使用typ="rt"的测试代码及结果

import sys
from ruamel.yaml import YAML
yaml=YAML(typ="rt")

with open("example.yml", 'r') as file:
    example_ = yaml.load(file)
yaml.dump(example_, sys.stdout)

输出结果:

Base:
  StartTime: 645:0000
  EndTimes: 645:023
  MidTimes: 645:02
  mac: 99:19:b9:fa:37:99
  MissionStartTimestamp: -2037:14522
  MissionEndTimestamp: -2037:14522

使用typ="safe"的结果

若将yaml=YAML(typ="rt")改为yaml=YAML(typ="safe"),所有值都会转为带单引号的字符串:

Base: {EndTimes: '645:023', MidTimes: '645:02', MissionEndTimestamp: '-2037:14522',
  MissionStartTimestamp: '-2037:14522', StartTime: '645:0000', mac: '99:19:b9:fa:37:99'}

问题

有没有方法可以避免上述问题,让这类带单冒号的内容像其他值一样正常加载——既不被转换为数值,也不会自动添加引号,同时保留原始格式?

内容的提问来源于stack exchange,提问作者Biaspoint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:20:34