yaml文件读取浮点数为string

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,修正了这个问题

猜你喜欢

转载自blog.csdn.net/u010590593/article/details/118882973