PyYAML 转储 Python 没有标签的对象
PyYAML dump Python object without tags
如何使用 PyYAML 转储 Python 个没有标签的对象?
我有这样的 class:
class Monster(yaml.YAMLObject):
yaml_tag = u'!Monster'
def __init__(self, name, hp, ac, attacks):
self.name = name
self.hp = hp
self.ac = ac
self.attacks = attacks
然后我尝试转储:
print(yaml.dump(Monster(name='Cave lizard', hp=[3,6], ac=16, attacks=['BITE','HURT'])))
得到结果:
!Monster
ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
但想要的结果是:
ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
我怎样才能得到这个?
由于您不想发出标签,您应该将执行此操作的方法更改为 no-op:
import yaml
import sys
class Monster(yaml.YAMLObject):
yaml_tag = u'!Monster'
def __init__(self, name, hp, ac, attacks):
self.name = name
self.hp = hp
self.ac = ac
self.attacks = attacks
def noop(self, *args, **kw):
pass
yaml.emitter.Emitter.process_tag = noop
yaml.dump([
Monster(name='Cave lizard', hp=[3,6], ac=16, attacks=['BITE','HURT']),
Monster(name='Sméagol', hp=400, ac=14, attacks=['TOUCH','EAT-GOLD']),
], sys.stdout, allow_unicode=True)
给出:
- ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
- ac: 14
attacks: [TOUCH, EAT-GOLD]
hp: 400
name: Sméagol
请注意,使用 print(yaml.dump())
在时间和内存方面效率低下。 PyYAML 有一个流式接口,所以你应该直接使用它而不是流式传输到缓冲区,然后使用 print()
流式传输缓冲区
如何使用 PyYAML 转储 Python 个没有标签的对象? 我有这样的 class:
class Monster(yaml.YAMLObject):
yaml_tag = u'!Monster'
def __init__(self, name, hp, ac, attacks):
self.name = name
self.hp = hp
self.ac = ac
self.attacks = attacks
然后我尝试转储:
print(yaml.dump(Monster(name='Cave lizard', hp=[3,6], ac=16, attacks=['BITE','HURT'])))
得到结果:
!Monster
ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
但想要的结果是:
ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
我怎样才能得到这个?
由于您不想发出标签,您应该将执行此操作的方法更改为 no-op:
import yaml
import sys
class Monster(yaml.YAMLObject):
yaml_tag = u'!Monster'
def __init__(self, name, hp, ac, attacks):
self.name = name
self.hp = hp
self.ac = ac
self.attacks = attacks
def noop(self, *args, **kw):
pass
yaml.emitter.Emitter.process_tag = noop
yaml.dump([
Monster(name='Cave lizard', hp=[3,6], ac=16, attacks=['BITE','HURT']),
Monster(name='Sméagol', hp=400, ac=14, attacks=['TOUCH','EAT-GOLD']),
], sys.stdout, allow_unicode=True)
给出:
- ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard
- ac: 14
attacks: [TOUCH, EAT-GOLD]
hp: 400
name: Sméagol
请注意,使用 print(yaml.dump())
在时间和内存方面效率低下。 PyYAML 有一个流式接口,所以你应该直接使用它而不是流式传输到缓冲区,然后使用 print()