size verecektir:
!!python/object:__main__.MyObj {}
PyYAML yalnızca istediğiniz çıktıda yorumlarla bir şey yapabilirsiniz: onları atmak .
Ben geliştirilen PyYAML için gelişmiş sürümü de geri istenen çıktıyı okurdum, bir dicti içeren bir dict ile sonlanır ((isim bilgisi olmadığından {'boby': {'age': 34}}
, bir MyObj()
örneğini almak değildir) ruamel.yaml) yorumlarda YAML'da okuyabilir, yorumları saklayabilir ve dökümü yaparken yorumları yazabilir. İstediğiniz çıktıyı okursanız, sonuçta elde edilen veriler bir dict içeren bir taslak gibi görünecek (ve hareket edecektir), ancak gerçekte yorumların üstesinden gelebilecek daha karmaşık bir veri yapısı vardır. Ancak, ruamel.yaml, MyObj
örneğini dökmenizi isterse ve o zaman yorumlar eklerseniz bu yapıyı oluşturabilirsiniz, istediğiniz çıktıyı elde edersiniz.
boby: # this is the name
age: 34 # in years
Eğer MyObj
örneğini temsil etmek istiyorum kadar CommentedMap
örneklerini oluşturma ile beklemeye gerek yoktur: yazdırır
from __future__ import print_function
import sys
import ruamel.yaml
from ruamel.yaml.comments import CommentedMap
class MyObj():
name = "boby"
age = 34
def convert_to_yaml_struct(self):
x = CommentedMap()
a = CommentedMap()
x[data.name] = a
x.yaml_add_eol_comment('this is the name', 'boby', 11)
a['age'] = data.age
a.yaml_add_eol_comment('in years', 'age', 11)
return x
@staticmethod
def yaml_representer(dumper, data, flow_style=False):
assert isinstance(dumper, ruamel.yaml.RoundTripDumper)
return dumper.represent_dict(data.convert_to_yaml_struct())
ruamel.yaml.RoundTripDumper.add_representer(MyObj, MyObj.yaml_representer)
ruamel.yaml.round_trip_dump(MyObj(), sys.stdout)
. Ben örn. name
ve age
öğelerini, CommentedMap
numaralı başvuruda/değerlerden alma/ayarlama özelliklerine dönüştürün. Bu şekilde yaml_representer
statik yönteminden daha kolay yorum ekleyebilirsiniz böylece MyObj
örneğini temsil etmek için çağrılır.
PyYAML ile büyük ölçüde kütüphanenin önemli bölümlerini yeniden yazmanın ve yorumların nasıl ele alınacağına dair bir takım kararlar almanın bir yolu olmadığından neredeyse eminim. Temsilci tarafından eklenen yorumlar (örneğin, sınıf başına) ister misiniz? Ya da her halükarda bir şekilde (daha da zor)? Bu biraz talihsiz bir şeydir, çünkü yorum ekleme yeteneği biraz yararlı olabilir. – cge
Teşekkürler @cge. Yaabili dokümanları programlı olarak işlerken yorumları korumak çok yararlı olacaktır. –
http://www.dzone.com/snippets/pyyaml-comment-emitter, Event/Dumper arayüzlerini kullanarak nasıl yapılacağını anlıyor görünmektedir. Henüz yanıt olarak yayınlamıyorum çünkü henüz çalışmaya doğrulanmadım. – kampu