如何从Python中删除yaml转储中的键/值对?

Ole*_*kov 7 python regex string yaml python-3.x

假设我有一个天真的类定义:

import yaml
class A:
    def __init__(self):
        self.abc = 1
        self.hidden = 100
        self.xyz = 2

    def __repr__(self):
        return yaml.dump(self)

A()
Run Code Online (Sandbox Code Playgroud)

印花

!!python/object:__main__.A
abc: 1
hidden: 100
xyz: 2
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方法来删除包含hidden: 100yaml dump的打印输出的行?密钥名称hidden是事先已知的,但其数值可能会更改.

期望的输出:

!!python/object:__main__.A
abc: 1
xyz: 2
Run Code Online (Sandbox Code Playgroud)

仅供参考:此转储仅供显示,不会加载.

我想可以使用key hidden来使用key =来抑制键/值对yaml.representative.另一种方法是hidden: [number]在字符串输出中使用RegEx 查找.

Hai*_* Vu 1

我查看了 pyyaml 的文档,但没有找到实现您目标的方法。解决方法是删除 attribute hidden、 call yaml.dump,然后将其添加回:

    def __repr__(self):
        hidden = self.hidden
        del self.hidden

        return yaml.dump(self)

        self.hidden = hidden
Run Code Online (Sandbox Code Playgroud)

退一步来说,你为什么要使用yamlfor __repr__?您可以自己推出而不是依赖吗yaml