PyYAML如何保留多行字符串换行符与缩进空格处理方法
时间:2026-08-17 | 作者:游戏探长 | 阅读:0碰到 PyYAML 解析多行字符串时,缩进空格和换行符“丢失”,根源其实很明确:yaml.safe_load() 默认会对多行字符串做“折叠”处理。这样一来,行首空格会被删除,多余换行也会被压缩。
如果你想原封不动保留这些空白字符,必须使用 YAML 的字面量块标量语法:|-。
问题根源:默认解析会折叠多行字符串
PyYAML 对字符串的解析,严格遵循 YAML 1.2 规范中关于标量样式的定义。
如果没有特别声明,直接写一段多行字符串,比如 "firstnn second",它会被当作折叠风格或流式风格处理。
这时,解析器通常会自动做以下几件事:
- 把连续的空白行合并成一个换行符(
nn→n); - 去掉每行开头的缩进空格,也就是“缩进基准”会被剥离;
- 把换行符当成空格分隔符来处理,除非主动启用字面量语义。
为什么会出现空格和换行丢失
所以,当你写下下面这段代码时,缩进空格和额外换行不会被保留:
import yaml
data = yaml.safe_load("firstnn second")
print(repr(data)) # 输出: 'firstnsecond'
结果就是:缩进空格和额外的换行都没了。
正确解法:使用字面量块标量 |-
核心方案很简单:使用字面量块标量(literal block scalar)。语法以 |- 开头。
|代表保留换行;-表示去掉末尾多余的那个换行符。
在它后面紧跟一个换行,然后按需要书写内容。这样,所有行首空格、内部换行,甚至制表符,都会原样保留。
示例代码
import yaml
# 正确:使用 |- 显式声明字面量块
data = yaml.safe_load("|-n firstn second")
print(repr(data))
# 输出: 'firstn second'
# 更贴近真实场景的用法(带缩进的 YAML 片段)
yaml_text = """
config:
description: |-
This is line one.
This line starts with 4 spaces.
And this is line three, aligned with line one.
"""
parsed = yaml.safe_load(yaml_text)
print(repr(parsed["config"]["description"]))
# 输出: 'This is line one.n This line starts with 4 spaces.nAnd this is line three, aligned with line one.'
注意事项
下面这些地方最容易踩坑,建议重点留意:
|-后面必须紧跟着换行符,否则解析会直接失败;- 字面量块里,所有行首空格都会被保留,包括首行之后的内缩进;
- YAML 要求块内的缩进不能少于首行的缩进,否则会报错;
- 末尾换行的处理方式不同:
|-是去掉末尾换行,|是保留末尾换行,>则是将换行折叠成空格; - 不要在字面量块中混用制表符和空格缩进,这很容易触发解析异常;
- 如果在 Python 代码中用三引号
"""书写多行 YAML,注意首行缩进要对齐,或者借助textwrap.dedent清理多余缩进。
结论
当你需要精确控制多行字符串里的空白字符时,尤其是既要保留缩进空格,又要保留换行符,不要依赖默认解析行为。
主动使用 YAML 字面量块语法 |-,这才是符合规范、稳定可靠、跨解析器兼容的标准方案。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- YY软件娱乐营收查看方法
- 时间:2026-08-22
-
- YY直播手机版如何设置不接收电话通知
- 时间:2026-08-21
-
- YY直播手机版开启麦克风权限设置方法
- 时间:2026-08-21
-
- YY直播手机版如何设置聊天隐身状态
- 时间:2026-08-21
-
- YY直播手机版如何一键清除缓存数据设置方法
- 时间:2026-08-21
-
- YY直播手机版如何设置应用登录密码教程
- 时间:2026-08-12
-
- YY直播手机版如何设置启用一键防护功能
- 时间:2026-08-12
-
- YY直播手机版如何关闭个性化广告推荐设置
- 时间:2026-08-11
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15