我会经常使用 yaml 来序列化不同数据类型的单个值。我注意到 PyYAML 通常会添加字符串'\n'
或'\n...\n'
在其输出的末尾。在我有限的实验中,删除这些尾随字符似乎是安全的。
默认行为
import yaml, decimal, datetime
items = ['hello', 3, True, decimal.Decimal('3.2'), datetime.date(2013, 5, 25)]
for i in items:
data = yaml.dump(i)
print '%r %r %r' % (i == yaml.load(data), i, data)
将输出:
True 'hello' 'hello\n...\n'
True 3 '3\n...\n'
True True 'true\n...\n'
True Decimal('3.2') "!!python/object/apply:decimal.Decimal ['3.2']\n"
True datetime.date(2013, 5, 25) '2013-05-25\n...\n'
去除特殊尾随字符
import yaml, decimal, datetime
items = ['hello', 3, True, decimal.Decimal('3.2'), datetime.date(2013, 5, 25)]
for i in items:
data = yaml.dump(i).replace('\n...\n', '').rstrip('\n')
print '%r %r %r' % (i == yaml.load(data), i, data)
将输出:
True 'hello' 'hello'
True 3 '3'
True True 'true'
True Decimal('3.2') "!!python/object/apply:decimal.Decimal ['3.2']"
True datetime.date(2013, 5, 25) '2013-05-25'
第二个代码块也是安全的。它是否适用于所有输入数据。我正在寻找会破坏的情况。我对任何会中断的情况感兴趣,即使是复杂的嵌套输入数据。