当前位置:

首页 > 编程开发 > 如何在 PyYAML 中保留多行字符串中的换行符与缩进空格

如何在 PyYAML 中保留多行字符串中的换行符与缩进空格

PyYAML默认解析多行字符串时折叠换行并删除缩进空格,使用字面量块标量`|-`可原样保留换行符与缩进空格,注意`|-`后须紧跟换行符且块内缩进不能少于首行,这是YAML字面量块标量的标准用法。

碰到 PyYAML 解析多行字符串时,发现缩进空格和换行符莫名其妙“丢了”,是不是挺让人抓狂的?其实问题根源很清晰:yaml.safe_load() 默认对多行字符串做“折叠”处理——行首空格被删除,多余换行也被压缩了。要想原封不动保留这些空白字符,必须祭出 YAML 的字面量块标量语法:|-

PyYAML 对字符串的解析,严格遵循 YAML 1.2 规范中关于标量样式的定义。如果没有特别声明,直接写一段多行字符串(比如 "first\n\n second"),它会被当作折叠风格流式风格来处理。这时候,解析器会自动做三件事:

  • 把连续的空白行合并成一个换行符(\n\n\n);
  • 去掉每行开头的缩进空格(也就是所谓的“缩进基准”被剥离了);
  • 把换行符当成空格分隔符来对待(除非主动启用字面量语义)。

所以当你写下这段代码时:

import yaml
data = yaml.safe_load("first\n\n         second")
print(repr(data))  # 输出: 'first\nsecond'

结果自然就是——缩进空格和额外的换行,全没了。

正确解法:用字面量块标量 |-

核心方案其实很简单:使用字面量块标量(literal block scalar)。语法是 |- 开头,其中 | 代表保留换行,- 表示去掉末尾多余的那个换行符。后面紧跟一个换行,然后按你需要的格式书写内容即可——所有行首空格、内部换行、甚至制表符,都会原样保留。

看个清楚点的例子:

import yaml

# ✅ 正确:使用 |- 显式声明字面量块
data = yaml.safe_load("|-\n first\n         second")
print(repr(data))
# 输出: 'first\n         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 字面量块语法 |- —— 这才是符合规范、稳定可靠、跨解析器兼容的标准方案。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

YY直播手机版设置隐藏活跃状态的方法
YY直播手机版设置隐藏活跃状态的方法

YY直播手机版设置隐藏活跃状态的方法 YY直播手机版,可是深受用户喜爱的直播平台应用哦!它汇聚了大量优质主播,直播内容也是丰富多彩,像才艺展示、聊天互动、游戏竞技等各种类型应有尽有,特别适合那些热衷于实时互动和个性化内容消费的朋友们。而且啊,这款应用还贴心地内置了“隐藏活跃状态”功能呢,这是专门为那

YY直播手机版设置一键清除缓存数据的方法
YY直播手机版设置一键清除缓存数据的方法

YY直播手机版作为一款历史悠久且内容丰富的直播平台,用户能借助它观看海量直播与视频内容,还支持发布图文、短视频等动态,并与好友实时互动聊天。然而,随着使用时间的增加,APP会积累大量缓存数据,包括临时视频、缩略图、加载资源以及基础组件库等,这些都会占用手机的存储空间。为了优化运行速度并释放内存,用户

YY直播手机版设置允许开启麦克风权限的方法
YY直播手机版设置允许开启麦克风权限的方法

YY直播手机版,这可是一款超棒的综合性语音娱乐应用,直播互动、才艺展示、实时连麦等功能一应俱全。在这里,用户既可以通过开播来吸引粉丝关注,又能够观看舞蹈、唱歌、聊天等各种类型的主播内容,还能与主播进行即时互动,从而有效提升自己的影响力和粉丝黏性。在开启直播或者录制小视频的时候,麦克风权限至关重要,它

YY直播手机版设置聊天隐身状态的方法
YY直播手机版设置聊天隐身状态的方法

YY直播手机版可是直播爱好者的绝佳之选,它是一款功能强大的移动互动平台。在这里,用户能轻松观看各种高质量的直播内容,还能依据自己的喜好,参与弹幕互动、点赞打赏、连麦交流等活动。此外,该平台还支持私信聊天、内容分享、故事发布等功能,让您在享受娱乐的同时,也能满足社交需求。尤其值得一提的是,其内置的“聊

YY直播手机版设置不允许接收电话通知的方法
YY直播手机版设置不允许接收电话通知的方法

YY手机版,可是一款备受用户热捧的直播与社交互动平台!它支持语音聊天、视频直播、才艺展示、连麦互动、游戏开黑等多种功能,能满足你多样化的需求。在这个平台上,用户不仅可以观看各类精彩纷呈的直播内容,还能发布个人作品、参与话题互动、加入兴趣社群,尽情享受全方位的娱乐体验。它的活跃用户超过5亿,日均在线人

怎样在无忧小说网中查看阅读进度
怎样在无忧小说网中查看阅读进度

在无忧小说网,如何精准掌握你的阅读进度? 在无忧小说网追更小说,最怕的就是忘了上次读到哪儿。如果感觉界面没有清晰显示阅读进度,别急,这通常不是数据丢失,而是相关视图功能没有开启或找到。掌握下面这四条路径,你就能对阅读进度了如指掌。 一、通过阅读页面顶部状态栏查看 最简单直接的方法,其实就藏在眼皮底下

YY直播手机版设置应用登录密码的方法
YY直播手机版设置应用登录密码的方法

YY手机版一直是很受欢迎的直播平台,用户基础相当大。借助它,不仅可以开启个人直播、和观众实时互动、慢慢积累粉丝,还能认识兴趣相近的朋友,分享生活里的精彩片段,甚至进一步拓展社交圈、邂逅理想伴侣。也正因为这类平台本身带有很强的社交属性,账号里往往又涉及不少个人信息,所以把隐私权限和账户安全设置到位,显

YY直播手机版设置启用一键防护功能的方法
YY直播手机版设置启用一键防护功能的方法

YY手机版是一款人气很高的直播平台应用,打开之后,系统会智能推荐各类优质直播内容。对于喜欢看直播,或者想借助直播拓展社交互动的人来说,这类体验会更顺手。应用里还提供了“一键防护”功能,明显是为更看重隐私和社交边界的用户准备的:如果不想被陌生人@提及、评论、转发作品,或者收到对方发来的好友申请,只要开

using namespace 使用中遇到的问题怎么解决
using namespace 使用中遇到的问题怎么解决

命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。