python - 这个较短的 yaml 输出安全吗

标签 python yaml

我会经常使用 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'

第二段代码也是安全的。它适用于所有输入数据吗?我正在寻找这会中断的情况。我对这会中断的任何情况都感兴趣,即使是复杂的嵌套输入数据也是如此。

最佳答案

trailing elipsis可选地表示文档的结尾,这使 YAML 具有自定界性。这在同一流中嵌入多个 YAML 文档时很有用,但如果您不需要它,您可以安全地删除它。

结尾的换行符也是可选的,但传统的文本解析工具会期望每一行都以换行符结束。换句话说,传统的 Unix 文本处理不会将换行符视为行之间的分隔符,而是将其视为当前行的终止符。未终止的最后一行是一个单独处理的异常(想到 diff 的“文件末尾没有换行符”消息),并且通常是错误的来源。您可以删除最后的换行符,但我建议不要在没有充分理由的情况下这样做。

关于python - 这个较短的 yaml 输出安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747459/

相关文章:

python - 从 pandas.core.series.Series 中删除前导零

python - 在 zsh 终端的 Mac 上的 Python 中安装 xgboost 失败

java - Jackson YAML 序列化对象数组格式

ruby - 用 Ruby 编写 YAML 文件 : lack of pretty printing formatting options

c++ - Yaml 到数据库

python - 在输出中添加星号

python拆分和评估

python - 更改 Holoviewplot 上的 x 或 y 轴 (hv.BoxWhisker)

amazon-web-services - Cloudformation Cognito - 如何通过 SAM 模板设置应用程序客户端设置、域和联合身份

ruby - 第 1 行第 1 列不允许使用心理控制字符