2017-11-28 19 views
1

いくつかの文字列を値フィールドとして持つYAMLにPython辞書をダンプしようとしています。私が手YAMLで二重引用符とスペースを使用して値を印刷するにはどうすればよいですか?

import yaml 
str1 = "hello" 
str2 = "world" 
mystr = "\"" + str1 + str(" ") + str2 + "\"" 
mydict = {"a" : mystr} 
f = open("temp.yaml", "w") 
yaml.dump(mydict, f, default_flow_style = False, \ 
        explicit_start = "---", explicit_end = "...", encoding = 'UTF-8') 
f.close() 

YAMLは次のとおりです。

a: '"hello 
world"' 

通知は、値が "こんにちは世界は" 次の行にこぼれています。 私はpython 3.5を使用しており、YAMLモジュールのバージョンは3.11です。

YAMLの外観を下のようにする方法を教えてもらえますか?

a: "hello world" 
+0

1.おそらく、 'mystr'の代わりに' mystr'をダンプしたいと思うでしょう。 2.私はpython 3.5.3とpyyaml 3.12で '{a: '" hello world "'}'を取得しています。使用している実際のコードを表示していますか? – tinita

+0

3.二重引用符で値を出力したい場合は、PyYAMLに通知する必要があります(申し訳ありませんが、現在オプションがあるかどうかはわかりません)。私の出力 '{a: '" hello world "'}' – tinita

+0

@tinitaから見ることができるように、ダンプする前にあなたの文字列に二重引用符を追加すると、望みの効果が得られません:はい私は 'mystr' .edited above ...私は二重引用符の前に一重引用符を見ることができます... – pranav3688

答えて

2

コードは少しばかりですが、あなたが望む結果が得られます。

global dict_keys 

def mk_double_quote(dumper, data): 
    if data in dict_keys: 
     return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='') 
    else: 
     return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='"') 

yaml.add_representer(str, mk_double_quote) 

d = {'a': 'Hello World'} 
dict_keys = set(d.keys()) 

f = open('temp.yaml', 'w') 
yaml.dump(d, f, default_flow_style=False, encoding='utf-8') 
f.close() 

結果は次のようになります。あなたは、文字列は、二重(またはシングル)引用符を取得した上で微細結晶粒制御したい場合はa: "Hello World"

1

、あなたが使用する必要がありますruamel.yaml(免責事項:私はそのパッケージの作者午前) 。これはPyYAMLの改良されたバージョンで、PyYAMLの多くの長年の問題が修正されています。

あなたが行うことができ、それにより

import sys 
import ruamel.yaml 

mystr = ruamel.yaml.scalarstring.DoubleQuotedScalarString('hello world') 
mydict = dict(a=mystr) 

yaml = ruamel.yaml.YAML() 
yaml.dump(mydict, sys.stdout) 

を取得するには:

a: "hello world" 

あなたはYAMLドキュメントから始める場合は、物事はさらに簡単です、あなたはこれらを保持したいだけで示すことができます余計な引用符:

yaml_str = """\ 
a: "hello world" 
""" 

yaml = ruamel.yaml.YAML() 
yaml.preserve_quotes = True 
data = yaml.load(yaml_str) 
yaml.dump(data, sys.stdout) 
関連する問題