2013-02-13 4 views
10

私はちょうどPyYAMLを使ってデータを変換し始めました。PyYAML値の変換を無効にする

私はちょうどyaml.load関数を使いました。すべての値を一意にコード化された文字列、int、日付などに変換しようとするまで、十分に機能しました。

これは私のアプリケーションでは致命的なことがありますが、この変換を避ける方法はありますか? 私はすべてを文字列として受け取りたいと思います。 コンストラクタを見て、この変換を無効にする方法が見つかりませんでした。

更新: yaml.loadから得られるものはOrderedDictであり、すべてが良好に見えます。唯一の問題は、一部の値が文字列であり、一部がintであることです。私は文字列としてすべての値を持っていたいと思います。私はpyyamlが私の値を変換したくない。

+0

次にあなたがYAMLをデコードしていません。また、**あなたは文字列として残したいものは何ですか? *すべて*文字列を残しておくと、 'the_file.read()'が必要です;-) – delnan

+0

pyyamlを使って解析しているファイルは実際にはyamlではありませんが、十分に近いです。したがって、私は型変換を避けたいです。 – theAlse

+0

しかし、*どのような種類の型変換ですか?あなたはリストを受け取りたいですか?辞書?ブールが変換されることを望みますか?浮き沈み?任意の深さや固定されたフォーマットにするには?それが存在するので、これはあまりにも不十分です。 – delnan

答えて

22

さて、あなたは文字列としてすべてのものを残すためにLoader=yaml.BaseLoaderを使用することができます。

>>> x = [[1,2,3], {1:2}] 
>>> s = yaml.dump(x) 
>>> s 
'- [1, 2, 3]\n- {1: 2}\n' 
>>> yaml.load(s) 
[[1, 2, 3], {1: 2}] 
>>> yaml.load(s, Loader=yaml.BaseLoader) 
[[u'1', u'2', u'3'], {u'1': u'2'}] 
+1

注意:これにより自動値変換は無効になりますが、 "<<"マージキーが複数のレベルにわたって機能しなくなりました(つまり、 "<<" - アンカーノード自体をマージする "<< " - 他のアンカーノードとの結合が解除されます) - PyYAML 3.10および3.11でテスト済み – voetsjoeba

関連する問題