Das Problem liegt in der Tatsache, dass der YAML-Resolver so eingerichtet ist, dass er Floats wie folgt abbildet:
%Vor%wobei die YAML-Spezifikation die Regex für die wissenschaftliche Notation wie folgt spezifiziert:
%Vor% Letzteres macht den Punkt optional, was nicht das obige re.compile()
-Muster ist.
Der Vergleich von Gleitkommazahlen kann korrigiert werden, so dass Gleitkommawerte mit einem e
/ E
, aber ohne Dezimalpunkt und mit Exponenten ohne Vorzeichen (d. h. +
impliziert) akzeptiert werden:
ergibt:
%Vor% Es gibt eine Diskrepanz zwischen dem, was JSON in Zahlen erlaubt, und der Regex in der Spezifikation YAML 1.2 (bezüglich des erforderlichen Punkts in der Zahl und e
in Kleinbuchstaben).
Die JSON-Spezifikation ist IMO sehr klar, da sie weder den Punkt vor 'e / E' erfordert noch ein Zeichen nach dem das "e / E":
Die PyYAML-Implementierung passt Floats teilweise gemäß der JSON-Spezifikation und teilweise gegen die Regex an und schlägt bei Zahlen fehl, die gültig sein sollten.
ruamel.yaml (das ist meine erweiterte Version von PyYAML), hat diese aktualisierten Muster und funktioniert korrekt:
%Vor%mit Ausgabe:
%Vor%ruamel.yaml akzeptiert auch die Nummer '1.0e6', die PyYAML auch als String ansieht.
Tags und Links python json dictionary pyyaml