2017-08-16 1 views
1

In Python 3.5 habe ich das folgende Wörterbuch in eine .yaml-Datei ausgegeben werden.Python Dump YAML mit doppelten Anführungszeichen um Strings

D={'name': 'mydata', value: {'x': 1, 'y': 2, 'z':3}}

Wenn ich den folgenden Code:

import ruamel 
import ruamel.yaml as yaml 
D={'name': 'mydata', 'value': {'x': 1, 'y': 2, 'z':3}} 
yaml.round_trip_dump(D, open('my_yaml.yaml', 'w'), 
        default_flow_style=False, indent=4) 

Das resultierende my_yaml.yaml sieht wie folgt aus:

name: mydata                  
value:                  
    z: 3                  
    x: 1                 
    y: 2 

Meine Frage ist, gibt es eine praktische Möglichkeit, doppelt zu schreiben zitiert um mydata, dh statt name: mydata wird es alsgeschrieben

Antwort

0

Es gibt eine relativ einfache Möglichkeit, dies zu tun:

import sys 
import ruamel.yaml 

S = ruamel.yaml.scalarstring.DoubleQuotedScalarString 
D = {'name': S('mydata'), 'value': {'x': 1, 'y': 2, 'z':3}} 

yaml = ruamel.yaml.YAML() 
yaml.indent(mapping=4) 
yaml.dump(D, sys.stdout) 

, die drei Linien halten, indem eine Instanz von YAML, ist die neuere Art und Weise zu tun:

ruamel.yaml.round_trip_dump(D, sys.stdout, indent=4) 

Mit dem neuen API können Sie einen anderen Einzugswert für Ihre Sequenzen angeben.

So oder so, gibt die oben Sie:

name: "mydata" 
value: 
    x: 1 
    y: 2 
    z: 3 

Es gibt keine Notwendigkeit, explizit zu default_flow_style=False tun, wenn ruamel.yaml s Round-Trip-Modus.


Die DoubleQuotedScalarString, eine Unterklasse von str, ist das, was verwendet wird "mydata" zu speichern, wenn Sie Ihre bevorzugte Ausgabe laden, während Zitate Erhaltung:

yaml.preserve_quotes = True 
data = yaml.load("""\ 
name: "mydata" 
value: 
    x: 1 
    y: 2 
    z: 3 
""") 
print(type(data['name'])) 

gibt:

<class 'ruamel.yaml.scalarstring.DoubleQuotedScalarString'> 

Wenn Wenn Ihre Ausgabe korrekt gerundet wird, ist es immer eine gute Idee, die Datenstruktur ruamel.yaml zu prüfen, ob es sich um ein Anführungszeichen handelt s, blockartige literale Skalare, hexadezimale Inte oder Kommentarerhaltung.
Die Bibliothek tut viel hinter den Kulissen, für die es keine Dokumentation gibt, und der Autor der Bibliothek ist wahrscheinlich zu faul, um mehr davon zur Verfügung zu stellen.

Verwandte Themen