2017-08-16 11 views
1

En Python 3.5, j'ai le dictionnaire suivant à être jeté dans un fichier .yaml.YAML de vidage Python à l'aide de guillemets doubles autour des chaînes

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

Quand je lance le code suivant:

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) 

Le my_yaml.yaml résultant se présente comme suit:

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

Ma question est, est-il un moyen pratique pour écrire deux cite autour de mydata, c'est-à-dire, au lieu de name: mydata, il est écrit name: "mydata"

Répondre

0

Il existe un moyen relativement facile à faire:

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) 

qui durent trois lignes, en utilisant une instance de YAML, est la nouvelle façon de faire:

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

Utilisation de la nouvelle API, vous pouvez donner une valeur de retrait différente pour vos séquences.

De toute façon, vous le donne ci-dessus:

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

Il n'y a pas besoin de faire explicitement default_flow_style=False lors de l'utilisation en mode aller-ronde ruamel.yaml.


Le DoubleQuotedScalarString, une sous-classe de str, est ce qui est utilisé pour stocker "mydata" si vous chargez votre sortie préférée, tout en conservant des citations:

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

donne:

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

Si vos sorties aller-retour correctement, il est toujours une bonne idée d'inspecter la structure de données ruamel.yaml charges, que ce soit pour double devis s, scalaires littéraux de type bloc, entiers hexadécimaux ou préservation de commentaires.
La bibliothèque fait beaucoup de coulisses pour lesquelles il n'y a pas de documentation, et l'auteur de la bibliothèque est probablement trop paresseux pour en fournir plus.