如何在 Python 中将折叠标量转储到 YAML(使用 ruamel?)

2024-01-06

我一直在 stackoverflow 上搜索,寻找一种使用 Python 以 YAML 格式转储折叠标量的方法。普通的answer https://stackoverflow.com/a/35406862/3615411来自用户Anthon https://stackoverflow.com/users/1307905/anthon谁建议使用他的 ruamel Python 库。我接受了建议,但我不知道如何以折叠方式转储长 Python 字符串值。

在 Anthon 的回答中,他/她经常使用带有折叠样式表示符“>”的硬编码字符串来说明他的观点,如下所示:

yaml_str = """\
long: >
  Line1
  Line2
  Line3
"""
data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)
print(yaml.dump(data, Dumper=yaml.RoundTripDumper))

我不知道如何将该示例转换为我自己的代码,其中我想要转储的字符串值不是来自其中已包含折叠表示符的硬编码值,而是来自 Django 请求(好吧,它可能来自实际上,无论在什么地方,重点是,我不会使用“>”在代码中手动构造字符串)。

我真的想做这样的事情吗:

stringToDumpFolded = "ljasdfl\n\nksajdf\r\n;lak'''sjf"

data = "Key: > \n" + stringToDumpFolded

ruamel.yaml.dump(data, f, Dumper=yaml.RoundTripDumper))

否则,给定一个长 unicode 字符串变量,如何使用 ruamel 将其转储到文件中?


从 0.15.61 开始,可以在 ruamel.yaml 中往返折叠标量:

import sys
import ruamel.yaml

yaml_str = """\
long: >
  Line1
  Line2
  Line3
"""

yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
print(type(data['long']), data['long'].fold_pos, end='\n-----\n')
yaml.dump(data, sys.stdout)

这使:

<class 'ruamel.yaml.scalarstring.FoldedScalarString'> [5, 11]
-----
long: >
  Line1
  Line2
  Line3

该类型的打印仅用于显示您如何建立 如果从头开始工作,您自己要创建什么对象:

from ruamel.yaml.scalarstring import FoldedScalarString as folded

s = folded('Line1 Line2 Line3\n')
data = dict(long=s)
yaml.dump(data, sys.stdout)

它给出了一个折叠标量,但可能不是您想要的方式:

long: >
  Line1 Line2 Line3

要使其折叠,您必须提供.fold_pos属性。那 属性必须是一个列表(或一些可逆迭代)的位置 字符串中的空格字符,需要插入折叠的地方:

s = folded('Line1 Line2 Line3\n')
s.fold_pos = [5, 11]
data = dict(long=s)
yaml.dump(data, sys.stdout)

它返回您期望的输出:

long: >
  Line1
  Line2
  Line3

由于您似乎希望折叠所有空间,因此您还可以执行以下操作:

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

如何在 Python 中将折叠标量转储到 YAML(使用 ruamel?) 的相关文章

  • for 循环在 Python 中生成/导出输出所需的时间太长

    这个问题是上一个问题的延续for 循环花费太长时间才能产生输出 https stackoverflow com questions 41339200 for loop taking too long to produce output no
  • 使用notebook时将jar添加到pyspark

    我正在尝试将 mongodb hadoop 与 Spark 集成 但不知道如何使 IPython 笔记本可以访问这些 jar 这是我想做的 set up parameters for reading from MongoDB via Had
  • 硒网格监听节点端口而不是集线器端口

    对于我的测试 我在不同的端口上本地运行网格和节点 java jar usr bin selenium server jar port 4444 role hub java jar usr bin selenium server jar ro
  • Pyjnius导入jar文件

    Pyjnius 允许您为 java 类创建 python 包装器 例如 Hardware autoclass org myapp Hardware 有没有办法像这样导入现有的 jar 文件 语法是什么样的 您可以将 jar 添加到 CLAS
  • gcloud app deploy:此部署有太多文件

    当我尝试通过 gcloud 部署我的 GAE 应用程序时 出现以下错误 Updating service default failed ERROR gcloud app deploy Error Response 400 This depl
  • 在 Pyinstaller、语音识别和 Pyttsx3 中使用“-w”时,PySimpleGUI 中出现“OSError:[WinError 6] 句柄无效”

    所以我用 PySimpleGUI 创建了一个程序 然后用 Pyinstaller 从它创建了 exe 文件 这是我的命令 pyinstaller hidden import pyttsx3 drivers hidden import pyt
  • UTF-8 解码如何知道字节边界?

    我一直在阅读大量有关 unicode 编码的文章 尤其是有关 Python 的文章 我想我现在对此已经有了相当深入的了解 但仍有一个小细节我有点不确定 解码如何知道字节边界 例如 假设我有一个带有两个 unicode 字符的 unicode
  • Web 应用程序框架:C++ 与 Python

    作为一名程序员 我熟悉 Python 和 C 我正在考虑编写自己的简单 Web 应用程序 并且想知道哪种语言更适合服务器端 Web 开发 我正在寻找一些东西 它必须是直观的 我认识到 Wt 存在并且它遵循 Qt 的模型 我讨厌 Qt 的一件
  • Python 日志记录 - 如何检查记录器是否为空

    我刚刚在我的应用程序中实现了日志记录 我想知道是否有一种方法可以检查记录器是否为空 我的想法是在我的脚本中设置两个处理程序 一个用于带水平仪的控制台WARNING 一个用于带级别的文件DEBUG 在脚本的最后 我需要检查是否CONSOLE记
  • Python:使用Excel CSV文件仅读取某些列和行

    虽然我可以读取 csv 文件而不是读取整个文件 但如何仅打印某些行和列 想象一下这是 Excel A B C D E State Heart Disease Rate Stroke Death Rate HIV Diagnosis Rate
  • 有什么理由不在Python中混合使用多处理和线程模块

    我正在考虑使用Python来实现一个需要大量多线程的程序 另一个要求是它将在桌面上运行 因此拥有许多进程将使应用程序显得混乱且难以杀死 在任务管理器中 因此 我正在考虑使用线程和多处理模块来减少进程数量 据我了解 GIL 仅适用于单个进程
  • 使用 django-profiles 以配置文件形式编辑相关模型

    我在用着Django 配置文件 http bitbucket org ubernostrum django profiles wiki Home在我的应用程序中 因为它为我提供了一些简单的视图 可以帮助我更快地到达我想去的地方 但是 我有一
  • 从 Cython 代码生成 SIMD 指令

    我需要概述在高性能数字代码中使用 Cython 可以获得的性能 我感兴趣的事情之一是找出优化的 C 编译器是否可以对 Cython 生成的代码进行矢量化 所以我决定写下面的小例子 import numpy as np cimport num
  • 在 CSV 文件的最上面一行写入

    我有这个sample csv 文件 a 1 apple b 2 banana c 3 cranberry d 4 durian e 5 eggplant 并有以下代码 samplefile open sample csv rb rows s
  • 无法从源 pylance 解析导入烧瓶

    我正在学习 Python 课程的一部分是使用 Flask 设置网络服务器 我按照 Flask 安装文档执行了步骤 由于某种原因 flask 模块带有下划线 如下所示 当我将鼠标悬停时 我会得到如下附加信息 无法从源 pylance 解析导入
  • 类型错误:不可散列的类型:pandas 的“切片”

    我有一个 pandas 数据结构 我这样创建 test inputs pd read csv input test csv delimiter 它的形状 print test inputs shape is this 28000 784 我
  • Python,质数检查器[重复]

    这个问题在这里已经有答案了 你好 我正在创建一个函数来检查一个数字是否是素数 但它告诉我 9 是一个素数 def eprimo num if num lt 2 return False if num 2 return True else f
  • 如何找到 JAR:/home/hadoop/contrib/streaming/hadoop-streaming.jar

    我正在练习有关 Amazon EMR 的复数视角视频教程 我被困住了 因为我收到此错误而无法继续 Not a valid JAR home hadoop contrib streaming hadoop streaming jar 请注意
  • 根据键的重复值从列表中删除字典

    我是Python新手 假设我有以下字典列表 mydictList a 1 b 2 c 3 a 2 b 2 c 4 a 2 b 3 c 4 从上面的列表中 我想删除具有相同键 b 值的字典 所以结果列表应该是 mydictList a 1 b
  • Django Python - LDAP 身份验证

    我目前正在研究 Django Python 我的目标是从 Ldap 目录对用户进行身份验证 我确实有 python 代码来访问 ldap 目录并检索信息 Code import ldap try l ldap open ldap forum

随机推荐

  • 构造函数参数的求值顺序[重复]

    这个问题在这里已经有答案了 假设我有这门课 struct A A int int int 我这样初始化它 A a b c 功能在哪里a b and c 全部返回int 应该a 之前被调用b and b before c 我对标准中的以下段落
  • Three.js - 获取鼠标单击的 X、Y 和 Z 坐标

    我在用着版本68三个 js 我想单击某处并获取 X Y 和 Z 坐标 我按照此处的步骤操作 但它们给我的 Z 值为 0 鼠标 画布 X Y 到 Three js 世界 X Y Z https stackoverflow com questi
  • tweepy OAuthHandler 错误

    我是新来的 对 python 没有经验 如果问题很微不足道 很抱歉 我有这个简单的脚本 用于获取给定 Twitter 用户的关注者 import time import tweepy consumer key xxx consumer se
  • 为什么我们需要虚拟表?

    我正在寻找一些有关虚拟表的信息 但找不到任何易于理解的内容 有人能给我一些很好的例子和解释吗 如果没有虚拟表 您将无法使运行时多态性发挥作用 因为对函数的所有引用都将在编译时绑定 一个简单的例子 struct Base virtual vo
  • Ajax 调用以 Base64 字符串形式返回 PDF 文件

    我在 Angular JS 环境中使用 ajax 来调用本地文件 pdf 文件 调用成功 但是ajax调用返回的数据是乱码 不确定我这里使用的术语是否正确 但就像使用文本编辑器打开pdf文件一样 无论如何 我可以得到 base64 字符串的
  • 使用Retrofit 2.0和RxJava获取响应状态代码

    我正在尝试升级到 Retrofit 2 0 并在我的 android 项目中添加 RxJava 我正在进行 api 调用 并希望在服务器出现错误响应时检索错误代码 Observable
  • 初始化列表与初始化方法

    在 C 中至少有两种初始化类的方法 1 初始化列表 struct C int i C i 0 2 初始化方法 struct D int i C init void init i 0 我需要时不时地重新初始化我的类的对象 使用第二种解决方案
  • C:为什么 LLVM 从左到右计算 printf,而 GCC 从右到左计算?

    正如这个问题中所述 LLVM和GCC 不同输出相同的代码 https stackoverflow com questions 15929795 llvm and gcc different output same code LLVM 和 G
  • Android - 从另一个活动完成活动

    有什么办法 如何从堆栈中完成某些活动 我有服务 它会查找更新 当找到更新时 它会打开更新活动 其中会出现安装提示 但是安装出现后我想完成更新活动 因为没有必要仍然在堆栈上 Thanks 如果更新活动正在启动另一个安装活动 那么您可能需要覆盖
  • 反应式的“缓冲直到安静”行为?

    我的问题有点像内格尔算法 https en wikipedia org wiki Nagle 27s algorithm是为了解决问题而创建的 但不完全是为了解决问题 我想要的是缓冲OnNext通知来自IObservable
  • 创建具有相同键和值的对象,而不重复数据

    在ES6中 我们可以这样做 const key foo const myObj key myObj gt foo foo So key 相当于 key key 但是 我们怎样才能创建同一个对象而不需要key多变的 我想要有类似的东西 foo
  • 使用应用程序期间可达性连接丢失时弹出警报(IOS xcode swift)

    我是 IOS 应用程序开发的初学者 希望 在使用应用程序期间失去可达性连接时弹出警报 IOS xcode swift 但我只在启动我的应用程序时收到弹出警报 当互联网连接丢失时 使用我的应用程序时不会弹出警报 请各位好心人帮忙 谢谢 我做了
  • Spring Batch - 并非所有记录都通过 MQ 检索进行处理

    我对 Spring 和 Spring Batch 相当陌生 所以如果您有任何疑问 请随时提出任何澄清问题 我发现 Spring Batch 存在问题 无法在测试或本地环境中重新创建 我们的日常工作是通过 JMS 连接到 Websphere
  • Java - Checkstyle - 冗余抛出

    我正在使用 STS 并安装了 checkstyle 插件 使用安装新软件与此网址http eclipse cs sourceforge net update http eclipse cs sourceforge net update 我的
  • 事件监听器如何工作?

    他们是否反复检查条件并在满足条件时执行 例如 操作系统如何准确知道 USB 设备何时插入 或者 MSN 如何准确知道您何时收到电子邮件 这是如何运作的 Thanks 在底层 操作系统内核 知道 何时发生某些事情 因为相关设备向 CPU 发送
  • 不处理从这里抛出的 Swift 错误

    我的代码在 Xcode 6 中工作 但自从我使用 Xcode 7 以来 我不知道如何解决这个问题 let jsonresult 行有一个错误 指出未处理从此处抛出的错误 代码如下 func connectionDidFinishLoadin
  • Hibernate / SQLException:字段没有默认值

    使用以下命令生成 mySQL 表 CREATE TABLE actors actorID INT 11 NOT NULL actorName VARCHAR 255 NOT NULL PRIMARY KEY AUTO INCREMENT a
  • 类型错误:$.datepicker 未定义

    我的 javascript 有代码 适用于我网站上的其中一个页面 nmdt1 datetimepicker dateFormat datepicker ATOM minDate nmsdt 当加载 id nmdt1 的页面时 这运行正常 我
  • 自定义键盘中handleInputModeList的正确实现

    iOS 10 中添加了一个新的 API 用于显示用户可以切换到的其他键盘列表 与用户在系统键盘上长按地球仪时出现的列表相同 函数的声明如下 func handleInputModeList from view UIView with eve
  • 如何在 Python 中将折叠标量转储到 YAML(使用 ruamel?)

    我一直在 stackoverflow 上搜索 寻找一种使用 Python 以 YAML 格式转储折叠标量的方法 普通的answer https stackoverflow com a 35406862 3615411来自用户Anthon h