1
我使用PyYAML轉儲來打印複雜的數據結構,但有一類對象不能,也不想被轉儲。忽略PyYAML轉儲的對象
目前我得到:
yaml.representer.RepresenterError: cannot represent an object
我想yaml.dump
完全忽略這個特定的類或只呈現類名,並繼續像往常一樣。
如果這是可能的,我該怎麼做?
我使用PyYAML轉儲來打印複雜的數據結構,但有一類對象不能,也不想被轉儲。忽略PyYAML轉儲的對象
目前我得到:
yaml.representer.RepresenterError: cannot represent an object
我想yaml.dump
完全忽略這個特定的類或只呈現類名,並繼續像往常一樣。
如果這是可能的,我該怎麼做?
您必須提供該對象的代表。有多種方法可以做到這一點,有些涉及改變對象。
當你明確地註冊申述,對象也沒有改變:
import sys
from ruamel import yaml
class Secret():
def __init__(self, user, password):
self.user = user
self.password = password
def secret_representer(dumper, data):
return dumper.represent_scalar(u'!secret', u'unknown')
yaml.add_representer(Secret, secret_representer)
data = dict(a=1, b=2, c=[42, Secret(user='cary', password='knoop')])
yaml.dump(data, sys.stdout)
在secret_representer
,該data
被實例化Secret()
,因爲功能不使用,也沒有「祕密「被泄露。你也可以例如返回用戶名,但不是密碼。 represent_scalar
函數需要一個標記(這裏我使用!secret
)和一個標量(這裏是字符串unknown
)。
上述的輸出:
a: 1
b: 2
c: [42, !secret '[unknown]']
我在上述其中使用ruamel.yaml
被PyYAML的升級版(聲明:我是包的作者)。上面也應該與PyYAML一起工作。