J'écris une application python. J'essaie de vider mon objet python dans yaml en utilisant PyYaml. J'utilise Python 2.6 et exécute Ubuntu Lucid 10.04. J'utilise le paquet PYYAML dans le paquet Ubuntu: http://packages.ubuntu.com/lucid/python/python-yamlDéposer une collection dans un fichier YAML avec PyYaml
Mon objet a 3 variables de texte et une liste d'objets. En gros, il est quelque chose comme ceci:
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
La classe que je veux vider contient une liste des instances AnotherObjectClass. Cette classe a quelques variables de texte.
PyYaml ne rejette en quelque sorte pas les collections dans l'occurrence AnotherObjectClass. PyYAML effectue le vidage de text_variable_1, de text_variable_2 et de text_variable_3.
J'utilise l'API PyYAML suivante pour sauvegarder exemple ClassToDump:
classToDump = ClassToDump();
yaml.dump(ClassToDump,yaml_file_to_dump)
Est-ce que quelqu'un a une expérience avec le dumping une liste d'objets en YAML?
Voici l'extrait de code complet réel:
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');
Ceci est la sortie:
!! python/objet: Miranda.Rule rule_condition: ALL rule_setting: !! python/objet: Miranda.RuleSetting {confirm_action: true, description: Ma Configuration, activé: vrai, récursif: vrai, dossier_fichier: dossier_fichier} rule_verb: !! python/objet: Miranda.RuleVerb {compression: true, dest_folder:/home/zainul/Téléchargements, Déplacer le fichier}
« PyYAML quelque sorte ne jetez pas les collections dans l'instance AnotherObjectClass "- quelles collections? Jusqu'à présent, tout ce que vous avez dit qu'il contient est trois variables de texte. S'il vous plaît envisager d'afficher un petit exemple concret (script exécutable) plus sa sortie plus ce que la sortie attendue est. –
Je pense qu'il y a une faute de frappe dans mon message original. J'ai modifié ma question. – zfranciscus
Votre extrait de code n'est PAS exécutable. les noms suivants ne sont pas définis: yaml, Miranda et 4 x règle *. Vous n'avez fourni aucune sortie réelle ou attendue. Est-ce que vous vous attendez vraiment à ce que les répondeurs sachent à quoi ressemble une instance de Miranda.Rule? Essayez de substituer une petite classe qui peut être épelée dans un script exécutable sans Miranda qui reproduit le problème. Ne pas oublier la production réelle/attendue. –