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'
コードの 2 番目のブロックも安全です。すべての入力データで機能しますか。これが壊れるケースを探しています。複雑なネストされた入力データであっても、これが壊れる場合に興味があります。