2017-02-08 13 views
0

達成したい:
辞書を辞書の既存のリストに追加し、その新しい辞書の値を更新します。辞書の辞書に辞書を追加すると、キーワードの前後に二重引用符が置かれます

私の問題は: .yamlから私の辞書を読むときRobotFrameworkは以下のようにキーワードと値の周りに2つのqoutesを置きます。私は

Vlan2: { u'IP': u'1.1.1.1', 
     u'DNS': {u'SN': u's2', u'PN': u's1'}, 
     u'SRoute': [{u'IF': u'eth0', u'Mask': u'0.0.0.0'}] 
     } 

を持って.yamlで

が、私は

Collections.Set To Dictionary ${Vlan2} IP=2.2.2.2 

を行うと、私は

[{ "u'IP'": "u'1.1.1.1'", 
    u'IP': '2.2.2.2', 
    "u'DNS'": {"u'SN'": "u's2'", "u'PN'": "u's1'"}, 
    "u'SRoute'": [{"u'IF'": "u'eth0'", "u'Mask'": "u'0.0.0.0'"}] 
}] 
を取得

Log To Console ${Vlan2} 

をコンソールにログインします

これは、Robot Frameworkが.yamlの値を読み込んで別のキーワードとして表示するときに、ダブルQoutを追加するために発生すると思いますが、これを修正する方法がわかりません。

情報のJSONが.yamlのように単一のqouteになっているので、二重のqoutesをすべて一緒に避けるのが理想的です。

ご協力いただきましてありがとうございます。

+0

実際に読むと二重引用符が追加されますか?ロギング時に二重引用符で出力をフォーマットするだけではないのですか?これらの二重引用符は値の一部ではないと思います...ロギング出力形式の一部です。データ構造ではなく、単一のデータ項目だけを記録することで、これをテストすることができます。あなたが実際にコードを投稿して、診断を助けたい場合は、 –

+0

[最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)を読んで、そのアドバイスに従ってください。 –

+1

PythonスタイルのUnicode文字列( 'u'SN'')のyamlデータがあることは疑わしいと思われます。 yamlがこの形式のユニコード文字列をサポートしていることは確かですか?このyamlファイルはどのように作成しましたか? –

答えて

3

ここではかなり混乱が生じています。あなたのYAMLのこの部分は:

{ u'IP': u'1.1.1.1', 

は、マッピング({)を起動し、キーと値のペアを提供します。キーと値の両方がスカラーです。最初のスカラーはuで始まり、キーインジケーター(:)の前で終わるので、スカラーの内容はu'IP'です。

情報がしようとしているJSONは.yamlのように基づいて、単一qouteですので、:あなたが言うので、これはおそらく、あなたが望むものではないことに注意してください。

あなたは実際には、あなたが引用符で囲まれていないスカラーを使用しているとき、あなたはYAMLで単一引用符で囲まれたスカラーを使用していることを考えているようです。 YAMLでは、スカラーが二重引用符('または")で始まらない場合はスカラーがプレーンスカラーであり、その内部にさらに引用符が内容として解析されます。あなたのスカラーはuで始まり、引用符で囲まれていないスカラーになっています。あなたのYAMLは、おそらく次のようになります。

Vlan2: { IP: 1.1.1.1, 
     DNS: {SN: s2, PN: s1}, 
     SRoute: [{IF: eth0, Mask: 0.0.0.0}] 
     } 

覚えておくべきもう一つの重要なことはPythonにロードされたとき、スカラーの表現スタイルが失われることである - 単一引用符で囲まれ、二重だった場合、それは違いはありません。 YAMLファイルで引用符で囲まれているか、引用符で囲まれていません。

ここで出力を見てみましょう。ここでも、文字列はテキスト形式で表されています。これは何らかの手段で引用されていることを意味します。表現"u'IP'"マッチは正確にあなたの入力し、二重引用符を文字列に追加ないです。それらは、囲まれた文字が文字列を形成することを伝える手段として使用されています。

出力には次の表現があります。u'IP'。これはまだ引用符で囲まれた文字列で、ちょうどPython固有の表現で、uの前にUnicode文字列であることが示されています。その内容はIPです。 u -prefixed表現がYAMLに存在しないため、入力が正しく機能しない理由はです。 YAMLでは、すべての入力はユニコードであり、通常はUTF-8としてエンコードされます。出力のu'IP'は、コードで設定した値IPです。また、既存のdictキーと一致しないため(説明した元のキーはu'IP'という内容で、出力には"u'IP'"と表示されています)、dictに追加のキーとして追加されています。

+0

私はどのように思います。 OPはそれらの中にPythonのUnicode文字列を持つYAMLファイルを取得することができました。コロンをつけた 'vlan2'キーでなければ誰かのように' repr() ' - python dictになります – Anthon

+0

時々、知りたいことはありません;) – flyx

+0

非常に真実ですが、行動を取り除くのが難しくなります問題の原因。私はYAML/docker-composeに関する質問をどのようにupvotedしてくれたのですか、それに感謝しています。もう1人の回答者は、ちょっと復讐しました。 – Anthon

関連する問題