-1

私はpythonアプリケーションを書いています。PyYaml を使用して Python オブジェクトを yaml にダンプしようとしています。Python 2.6 を使用し、Ubuntu Lucid 10.04 を実行しています。Ubuntu パッケージで PyYAML パッケージを使用しています: http://packages.ubuntu.com/lucid/python/python-yaml

オブジェクトには 3 つのテキスト変数とオブジェクトのリストがあります。ざっくりですが、こんな感じです。

ClassToDump:

   #3 text variables
   text_variable_1
   text_variable_2
   text_variable_3
   #a list of AnotherObjectsClass instances
   list_of_another_objects = [object1,object2,object3]


AnotherObjectsClass:
   text_variable_1
   text_variable_2
   text_variable_3

ダンプしたいクラスには、AnotherObjectClass インスタンスのリストが含まれています。このクラスには、いくつかのテキスト変数があります。

PyYaml はどういうわけか、コレクションを AnotherObjectClass インスタンスにダンプしません。PyYAML は、text_variable_1、text_variable_2、および text_variable_3 をダンプします。

ClassToDump インスタンスをダンプするために、次の pyYaml API を使用しています。

classToDump = ClassToDump();
yaml.dump(ClassToDump,yaml_file_to_dump)

オブジェクトのリストを YAML にダンプした経験のある人はいますか?

実際の完全なコード スニペットは次のとおりです。

def write_config(file_path,class_to_dump):    
    config_file = open(file_path,'w');  
    yaml.dump(class_to_dump,config_file);

def dump_objects():

rule = Miranda.Rule();
rule.rule_condition = Miranda.ALL
rule.rule_setting = ruleSetting
rule.rule_subjects.append(rule1)
rule.rule_subjects.append(rule2)
rule.rule_verb = ruleVerb

write_config(rule ,'./config.yaml');

これは出力です:

!!python/object:Miranda.Rule rule_condition: ALL rul​​e_setting: !!python/object:Miranda.RuleSetting {confirm_action: true, description: My Configuration, enabled: true, recursive: true, source_folder: source_folder} rule_verb: !!python /object:Miranda.RuleVerb {compression: true, dest_folder: /home/zainul/Downloads, type: Move File}

4

1 に答える 1

2

PyYaml モジュールが詳細を処理します。次のスニペットが役立つことを願っています。

import sys
import yaml

class AnotherClass:
    def __init__(self):
        pass

class MyClass:
    def __init__(self):
        self.text_variable_1 = 'hello'
        self.text_variable_2 = 'world'
        self.text_variable_3 = 'foobar'
        self.list_of_another_objects = [
            AnotherClass(),
            AnotherClass(),
            AnotherClass()
        ]

obj = MyClass()
yaml.dump(obj, sys.stdout)

そのコードの出力は次のとおりです。

!!python/object:__main__.MyClass
list_of_another_objects:
- !!python/object:__main__.AnotherClass {}
- !!python/object:__main__.AnotherClass {}
- !!python/object:__main__.AnotherClass {}
text_variable_1: hello
text_variable_2: world
text_variable_3: foobar
于 2010-07-13T10:32:12.110 に答える