yaml文件读取浮点数为string

本文介绍了在Stackoverflow上发现的一个关于yaml文件解析浮点数时遇到的问题,该问题源于yaml默认加载器的正则匹配错误。为了解决此问题,提供了三种解决方案:1) 在yaml文件中直接进行类型转换;2) 自定义loader并添加新的正则匹配规则;3) 使用修正此问题的第三方库ruamel.yaml。通过这些方法,可以确保yaml文件中的浮点数正确解析。
摘要由CSDN通过智能技术生成

Stackoverflow上有这个问题的详细解决过程。
总结一下,出现这个问题是因为原来的yaml官方默认的FullLoad过程中的正则匹配语句(loader)有问题。
有三种解决方法:

  1. 在yaml文件中强制类型转换
max: !!float 1e5
  1. 换loader,自己加进去
loader = yaml.SafeLoader
loader.add_implicit_resolver(
    u'tag:yaml.org,2002:float',
    re.compile(u'''^(?:
     [-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)?
    |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
    |\\.[0-9_]+(?:[eE][-+][0-9]+)?
    |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*
    |[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$''', re.X),
    list(u'-+0123456789.'))
    
with open(path, 'r') as f:
	config = yaml.load(f,Loader=loader)
  1. yaml换包
    这个包ruamel.yaml,修正了这个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值