在 PyYAML 中格式化自定义类输出

2024-01-25

我正在这里研究一个简单的示例,但文档仍然让我有点困惑。
这是示例代码:

class A(yaml.YAMLObject):
    yaml_tag = u'!A'

    def __init__(self, val):
        self.val = val

if __name__ == '__main__':
    t = datetime.time()
    a = A(t)
    print yaml.dump(a)
    print yaml.load(yaml.dump(a)).val == t

输出是

!A val: !!python/object/apply:datetime.time ["\0\0\0\0\0\0"]

True

因此,它似乎是忠实的数据/序列化,但默认的时间对象格式还有一些不足之处。我怎样才能让它更漂亮,同时保留我强大的转储/负载能力?

Thanks


重新定义文档中所有时间的时间格式

您可以为任何内容定义自己的序列化格式datetime.time文档中的实例使用PyYAML“代表者”和“构造者” http://pyyaml.org/wiki/PyYAMLDocumentation#Constructorsrepresentersresolvers.

import datetime

import yaml

time_format = '%H:%M:%S'


def time_representer(dumper, data):
    return dumper.represent_scalar(u'!time', data.strftime(time_format))


def time_constructor(loader, node):
    value = loader.construct_scalar(node)
    return datetime.datetime.strptime(value, time_format).time()


yaml.add_representer(datetime.time, time_representer)
yaml.add_constructor(u'!time', time_constructor)


class A(yaml.YAMLObject):
    yaml_tag = u'!A'

    def __init__(self, val):
        self.val = val


if __name__ == '__main__':
    t = datetime.time()
    a = A(t)
    print yaml.dump(a, default_flow_style=False)
    print yaml.load(yaml.dump(a)).val == t

将输出:

!A
val: !time '00:00:00'

True

仅为特定班级重新定义时间格式

您还可以定义特定类如何序列化和反序列化。这样你就可以改变时间的表示方式A only. YAMLObject 的文档 http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLObject

import datetime

import yaml

time_format = '%H:%M:%S'

class A(yaml.YAMLObject):
    yaml_tag = u'!A'

    def __init__(self, val):
        self.val = val

    @classmethod
    def to_yaml(cls, dumper, data):
        dict_representation = {
            'val':data.val.strftime(time_format)
        }
        node = dumper.represent_mapping(u'!A', dict_representation)
        return node

    @classmethod
    def from_yaml(cls, loader, node):
        dict_representation = loader.construct_mapping(node)
        val = datetime.datetime.strptime(
            dict_representation['val'], time_format).time()
        return A(val)

if __name__ == '__main__':
    t = datetime.time()
    a = A(t)
    print yaml.dump([t,a], default_flow_style=False)

    loaded = yaml.load(yaml.dump([t,a]))
    print loaded[0] == t
    print loaded[1].val == t

将输出:

- !!python/object/apply:datetime.time
  - "\0\0\0\0\0\0"
- !A
  val: 00:00:00

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

在 PyYAML 中格式化自定义类输出 的相关文章

  • 根据随机选择的列生成随机天数

    我有一个如下所示的数据框 感谢 SO 社区在以下方面提供的帮助 df1 pd DataFrame person id 11 11 12 13 14 date birth 01 01 1961 12 30 1961 05 29 1967 01
  • Python3+Kivy+Plyer 推送通知图标问题

    我在使用 Android 的简单通知测试应用程序时遇到了一个奇怪的错误 错误 python AttributeError type object notification org notificator R drawable has no
  • 如何 json_normalize() df 中的特定字段并保留其他列? [复制]

    这个问题在这里已经有答案了 这是我的简单示例 我的实际数据集中的 json 字段非常嵌套 因此我一次解压一层 我需要在 json normalize 之后保留数据集上的某些列 https pandas pydata org docs ref
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • 对打开文件的脚本进行单元测试

    我编写了一个脚本 它打开一个文件 读取内容并进行一些操作和计算 并将它们存储在集合和字典中 我该如何为这样的事情编写单元测试 我的问题具体是 我会测试文件是否打开 文件很大 这是unix字典文件 我如何对计算进行单元测试 我真的必须手动计算
  • 将 Django 表单中的所有 CharField 表单字段输入转换为小写

    我使用 Django 表单进行用户注册 用户可以在其中输入优惠券代码 我希望在优惠券代码字段中输入的所有字符都转换为小写 我尝试过在保存方法 自定义清理方法和自定义验证器中使用 lower 但这些方法没有运气 下面是我的代码 class S
  • 如何用xlrd读取公式

    我正在尝试做一个解析器 它读取几个 Excel 文件 我通常需要位于行底部的值 您可以在其中找到所有上部元素的总和 因此 单元格值实际上是 sum 或 A5 0 5 可以说 对于使用 Excel 打开此文件的用户来说 它看起来像一个数字 这
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 在 Windows 上将 Word2vec 与 Tensorflow 结合使用

    In 本教程文件 https github com tensorflow models blob master tutorials embedding word2vec py L45通过 Tensorflow 找到以下行 第 45 行 来加
  • Pandas,按最大返回值进行分组 AssertionError:

    熊猫有问题 我想听听你的意见 我有这个数据框 我需要在其中获取最大值 代码就在下面 df stack pd DataFrame 1 0 2016 0 NonResidential Hotel 98101 0 DOWNTOWN 47 6122
  • 如何在 Keras 中使用部分输入进行训练,其余部分用于损失函数

    我是 Keras 新手 正在尝试实现神经网络机器学习模型 输入张量看起来像 X1 X2 和输出 Y 注意 X1 和 X2 是相关的 在模型中 只有 X1 将用于训练 但 X1 和 X2 都将传递给损失函数 该损失函数是 X1 X2 y pr
  • 别碰我的女人

    我讨厌的一件事迪斯图尔斯 http docs python org distutils 我猜他是邪恶的人 他这样做了 https github com python cpython blob 300dd552b15825abfe0e367a
  • 将具有不同大小的行的数据加载到 Numpy 数组中

    假设我有一个包含如下数据的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如何将它加载到 numpy 数组中 使其看起来像这样 1 2 3 4 5 0 6 7 8 0 0 0 9 1
  • 如何获取 Matplotlib 生成的散点图的像素坐标?

    我使用 Matplotlib 生成散点图的 PNG 文件 现在 对于每个散点图 除了 PNG 文件之外 我还会also就像生成散点图中各个点的像素坐标列表一样 我用来生成散点图 PNG 文件的代码基本上是这样的 from matplotli
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • 向伪 shell (pty) 发出命令

    我尝试使用 subprocess popen os spawn 来运行进程 但似乎需要伪终端 import pty master slave pty openpty os write master ls l 应该发送 ls l 到从属终端
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当

随机推荐

  • npm 无法在 Windows 中运行

    我安装了node js和npm 当我在 Windows 命令提示符下输入 npm v 它返回 2 15 1 但是当我尝试安装如下软件包时 npm install xml parser 我看到有东西正在加载 然后就什么也没有了 出了什么问题
  • 为什么信号处理程序中的打印操作可能会改变死锁情况?

    我得到的简单程序如下 import threading import time import signal WITH DEADLOCK 0 lock threading Lock def interruptHandler signo fra
  • 如何在进程退出之前强制 Nodejs Winston 日志记录到文件

    我在用温斯顿 3 https github com winstonjs winston记录我的数据 但有时它在进程退出之前没有记录错误 以下进程将退出 不登录logfile log const winston require winston
  • Windows x64 的串行/Com 端口监视器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一些好的 Com 端口监控工具 比如 Portmon 它也可以在 Windows x64 上运行
  • 在 WordPress 站点中加载 jquery.js 后加载 javascript 代码

    我在 WordPress 网站的主页上有一个基于 jquery 的自定义滑块 我正在主题的functions php 文件中使用以下代码加载jQuery jquery js 和滑块js jquery advanced slider js f
  • Rails 3 - nil 的未定义方法“map”:NilClass 用于我自己的验证

    我遇到了很奇怪的问题 我有Timetable模型并尝试编写我的自定义验证 所以 现在我只是尝试为字段添加测试错误以确保一切正常 但这不起作用 因此 我尝试更新时间表模型的对象 但是当我不使用测试自定义验证时 一切都很完美 否则我会得到这样的
  • 将 geom_text 中的图例文本颜色与符号匹配[重复]

    这个问题在这里已经有答案了 我正在尝试将图例的文本与分解变量生成的文本的颜色进行颜色匹配geom text 这是一个最小的工作示例 df lt data frame a rnorm 10 b 1 10 c letters 1 10 d c
  • Swift 三个双引号

    我是斯威夫特的新手 该文档说 对于占用多行的字符串 请使用三个双引号 只要与结束引号的缩进相匹配 每个带引号的行开头的缩进就会被删除 例如 let quotation Even though there s whitespace to th
  • 类型错误:“list”和“int”实例之间不支持“>=”

    嗨 我遇到了上述错误 问题出在最后一个函数 get student average 上 如果 results 存储 get average student 值 为什么它不能返回 get letter grade results 的结果 ll
  • 求 pi 的值直到 50 位

    我想计算 PI 的值直到 50 位 如何在java中实现小数点后50位 您无法使用默认数据类型执行此操作 因为您需要 50 位数字 50 log 2 log 10 166 位 这里 BigDecimal 是您可以使用的一种类型 但您应该记住
  • nil 的 Ruby 用例,相当于 Python None 或 JavaScript undefined

    鲁比的怎么样nil体现在代码中 例如 在 Python 中 当默认参数引用另一个参数时 您可以使用 None 作为默认参数 但在 Ruby 中 您可以引用 arg 列表中的其他参数 请参阅这个问题 https stackoverflow c
  • npm 发布 - 从 package.json 中删除脚本?

    在发布我的脚本之前 我在 package json 下有许多脚本来编译咖啡脚本 打字稿和仅限开发人员的命令 一旦发布就没有任何意义 我想知道是否有删除 package json 下某些脚本的程序 考虑到在发布包时 它也会发布 package
  • 在 Matter.js 中旋转相机

    我正在开发一款以太空为背景的自上而下的物理游戏 我希望旋转到视图时始终显示玩家的船朝上 即使船可以旋转 我搜索了文档 但没有找到任何有关旋转世界或渲染器的信息 但我可能不知道要查找的正确术语 这对于 Matter js 来说是可能的吗 我不
  • 使用 ng-template 在 Angular 10 中仅显示博客中的相关条目

    我有一个用 Strapi 制作的博客后端 您可以在其中添加一些内容类型 例如标题字段 描述字段和内容字段 我还有一个布尔内容类型来设置博客是否相关 我在 Angular 中设置了一个 ngFor 来显示我所有的博客条目 但我只想展示相关的内
  • 为什么不同 Android 版本的 apk 大小会增加

    我创建了一个简单的应用程序 由 android studio 生成的 apk 大小为 1 MB 然后我安装在android 2 3版本大小增加到3 48 MB 然后我安装在android 5 0版本大小增加至 5 48 MB 我的问题只是为
  • socket.error:[errno 99] 无法分配请求的地址:flask 和 python

    我有同样的问题 and here https stackoverflow com questions 19246103 socket errorerrno 99 cannot assign requested address and nam
  • 单向来源困境

    我在用OneWayToSource绑定 它似乎总是将我的源属性设置为 null 为什么会这样 这给我带来了麻烦 因为我需要源属性中目标属性的值而不是 null 这是我的代码 MyViewModel cs public class MyVie
  • 使用 Aeson 解析嵌套 JSON 中的数组

    我正在尝试写一个FromJSON埃森的功能 JSON total 1 movies id 771315522 title Harry Potter and the Philosophers Stone Wizard s Collection
  • 在Android中使用notifyItemRemoved或notifyDataSetChanged与RecyclerView

    我正在创建一个要使用 RecyclerView 显示的卡片列表 其中每张卡片都有一个用于从列表中删除该卡片的按钮 当我使用通知项目已删除 要删除 RecyclerView 中的卡片 它会删除该项目并进行良好的动画处理 但列表中的数据未正确更
  • 在 PyYAML 中格式化自定义类输出

    我正在这里研究一个简单的示例 但文档仍然让我有点困惑 这是示例代码 class A yaml YAMLObject yaml tag u A def init self val self val val if name main t dat