使用 PyYAML 将文档作为 yaml 中的原始字符串加载

2023-11-27

我想解析 yaml 文档,如下所示:

meta-info-1: val1
meta-info-2: val2

---

Plain text/markdown content!
jhaha

If I load_all使用 PyYAML,我得到以下内容

>>> list(yaml.load_all(open('index.yml')))
[{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha']

我在这里想要实现的是 yaml 文件应该包含两个文档,第二个文档应该被解释为单个字符串文档,更具体地说是具有 Markdown 格式的任何大型文本正文。我不希望它被解析为 YAML 语法。

在上面的示例中,PyYAML 将第二个文档作为单个字符串返回。但是如果第二个文档有一个:字符代替!例如,我收到语法错误。这是因为 PyYAML 正在解析该文档中的内容。

有没有办法告诉 PyYAML 第二个文档只是一个原始字符串而不是解析它?

Edit: 那里有一些很好的答案。虽然使用引号或文字语法解决了上述问题,但我希望用户能够编写纯文本,而不会产生任何额外的麻烦。就这三个-'s (or .'s)并写下大量纯文本。其中也可能包含引号。所以,我想知道是否可以告诉 PyYAML 仅解析一个文档,并将第二个文档提供给我。

Edit 2:适应 agf 的想法,而不是使用 try/ except 因为第二个文档可能是有效的 yaml 语法,

config_content, body_content = open(filename).read().split('\n---')
config = yaml.loads(config_content)
body = yaml.loads(body_content)

谢谢 agf。


你可以做

raw = open(filename).read()
docs = []
for raw_doc in raw.split('\n---'):
    try:
        docs.append(yaml.load(raw_doc))
    except SyntaxError:
        docs.append(raw_doc)

如果您无法控制原始文档的格式。

从 PyYAML 文档中,

双引号是最强大的风格,唯一可以表达任何标量值的样式。双引号标量允许转义。使用转义序列 \x** 和 \u****,您可以表达任何 ASCII 或 Unicode 字符。

所以听起来如果没有双引号,就无法在解析中表示任意标量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PyYAML 将文档作为 yaml 中的原始字符串加载 的相关文章

随机推荐

  • 我有这个错误“#1273 - 未知排序规则:'utf8mb4_0900_ai_ci'”

    CREATE TABLE payment methods payment method id tinyint 4 NOT NULL AUTO INCREMENT name varchar 50 NOT NULL PRIMARY KEY pa
  • 在具有 Root 权限的 Android 4.4.2 中启用 KioskMode

    我能够通过终止 KitKat 之前的版本来启用 kiosk 模式com android systemui过程 无论如何 这似乎在 KitKat 版本中不起作用 终止进程后 整个屏幕卡住了 我无法按任何按钮 在检查了 Play 商店中的类似应
  • 第二次单击时从元素中删除活动和焦点

    我正在尝试制作一个带有信息的交互式地图 当您单击一个点时 它会调整大小并显示一些联系人 这是因为该元素获得了 active and focus伪类 有什么方法可以在第二次单击元素时从元素中删除伪类吗 实际上 是否可以在再次单击元素时关闭元素
  • RAISERROR―如何与SqlException区分?

    我有一些 3 4 个存储过程 如果需要的话我可以修改它们 使用RAISERROR通知我的应用程序数据库方面的一些致命错误 其中一些存储过程是从 C 端执行的ExecuteNonQuery 而其他则执行ExecuteReader 目前 我将这
  • 将所有包含内容放在一个头文件中是个好主意吗?

    对于 C 来说 放入 C 头文件中的内容的最佳实践是什么 将跨多个源文件的程序使用的所有包含内容放在一个头文件中是否有用 几乎每个文件 即 stdio h 中都使用的包含怎么样 不会 它只会增加麻烦和开销 作为维护者 你面临的最大的痛苦之一
  • Maven - 未解决部署在 Artifactory 上的工件的传递依赖关系

    我有两个项目 A 和 B 其中 A 依赖于 B 我将 B 打包为 jar 并将其部署在 maven 服务器 artifactory 上 然后将该 jar 包含在 pom 文件中作为项目 A 的正常依赖项 B 的 jar 文件显示在项目 A
  • 使用 Google Apps 脚本修改绘图

    有没有人找到使用 Google Apps 脚本创建或更改绘图的支持 我已经浏览过谷歌文档 但我没有看到任何绘画课程 我发现了如何构建用户界面元素 但不是图纸 我希望将绘图作为文档或电子表格的一部分 但独立的绘图就足够了 直到今天 还无法执行
  • shell_exec 无需等待输出[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中的异步 shell 执行 有没有办法使用 shell exec 而不等待命令完成 我想运行一个相当慢 复杂的程序 至少需要 10 分钟才能完成 我想通过 shell exec 或类似的东西来
  • 如何优雅地返回默认初始化的对象?

    我有一个如下所示的课程 class VeryVeryVeryLongTypeName bool is ok VeryVeryVeryLongTypeName is ok false VeryVeryVeryLongTypeName f Ve
  • 如何从 bootRun 传递 JVM 选项

    我正在开发与远程主机通信的简单 Spring Web 应用程序 我想在公司代理后面在本地测试它 我使用 Spring Boot gradle 插件 问题是如何指定 JVM 的代理设置 我尝试了几种方法来做到这一点 gradle Dhttp
  • 使用 Apache Beam 按键处理事件的总排序

    问题背景 我正在尝试从实时流中生成每个键的事件项的总 线性 顺序 其中顺序是事件时间 源自事件有效负载 Approach 我曾尝试使用流式传输来实现此目的 如下所示 1 设置一个非重叠的顺序窗口 例如时长5分钟 2 建立允许的迟到 可以丢弃
  • 自动日期/时间解析器,无需指定格式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个java库 它可以将字符串解析为POJO而不指定格式 我研究过POjava 还有其他库可以做类似的事情吗 DateTime dateT
  • 为什么Spark要将Map阶段的输出保存到本地磁盘?

    我试图深入了解 Spark Shuffle 过程 当我开始阅读时 我遇到了以下几点 Spark 完成后将 Map 任务 ShuffleMapTask 输出直接写入磁盘 我想了解以下关于 Hadoop MapReduce 的内容 如果Map
  • 在 Meteor.js 中,如何让两个开发项目使用同一个 Mongo 实例?

    我希望两个单独的应用程序使用相同的 Mongo DB 实例 并且由于我同时开发它们 因此我希望能够共享相同的开发数据库实例 我意识到 Meteor 的每个实例都必须在它自己的端口上运行 有没有办法像系统版本的MongoDB一样强制meteo
  • 当每个请求的应用程序 ID 和应用程序密钥都不同时,使用omniauth-facebook 吗?

    The omn iauth facebook自述文件提到了如何在初始化程序中设置它以及如何设置选项 例如scope仅根据请求 我想知道是否也可以为每个请求设置应用程序 ID 和应用程序密钥 你可以这样做 在您的omniauth rb 上 执
  • 在 Service Worker / fetch() 中识别 HTTP 304

    我构建了一个服务工作人员 它始终使用缓存中的数据进行响应 然后在后台向服务器发送请求 如果服务器响应HTTP 304 not modified一切都很好 如果服务器响应HTTP 200 这意味着数据已更改 新文件已放入缓存中 同时通知用户并
  • 初始化 ST-Link 设备时出错 - 无法连接到设备

    我目前正在使用 ST Link 调试器对我的 STM32F3 Discovery 板进行编程 我使用的IDE是Atollic TrueStudio 5 5 2 现在我面临一个非常奇怪的问题 那就是我不断收到消息 初始化 ST Link 设备
  • Selenium WebDriver (2.25) 超时不起作用

    我想我已经阅读了 Stack Overflow 上的所有 Selenium 超时问题 但隐式或显式超时在我的 Selenium webdriver 2 25 Python 2 7 绑定 中都不起作用 并且 no timeout here 行
  • 如何将 ContinuationToken 与递归文件夹迭代器一起使用

    由于 Drive API 配额 服务配额以及脚本执行时间的限制6 min将 Google Drive 文件操作拆分为多个块通常很重要 我们可以用属性服务储藏continuationToken for 文件夹迭代器 or 文件迭代器 这样我们
  • 使用 PyYAML 将文档作为 yaml 中的原始字符串加载

    我想解析 yaml 文档 如下所示 meta info 1 val1 meta info 2 val2 Plain text markdown content jhaha If I load all使用 PyYAML 我得到以下内容 gt