• Python面向对象编程指南(第9章)序列化和保存-JSON、YAML,PickleCSV和XML


    把这本压箱底的书拿出来看了下,感觉还不错,就给自己记录一下。

    JSON,YAML,Pickle,XML和CSV比较适合用于数据交换,主要应用于单一对象而非多个对象的场景。

    Shelve支持多个对象的持久化

    为了存储Python中的对象,必须先将其转换为字节,然后再将字节写入文件,这个过程成为序列化,又要数据转化,压缩,编码。

    这是一本好书,超级烂的翻译,很多文字描述语句都读不通。

    9.3定义用于持久化的类。

    书中定义了类,通过jinja2来渲染实例。

    代码写的绝对使高手,jinja的用法快忘了。

    import datetime
    from collections import defaultdict
    
    class Post:
        def __init__(self, date, title, rst_text, tags):
            self.date = date
            self.title = title
            self.rst_text = rst_text
            self.tags = tags
    
        def as_dict(self):
            return dict(
                date=str(self.date),
                title=self.title,
                underline="_" * len(self.title),
                res_test = self.rst_text,
                tag_text = " ".join(self.tags)
            )
    
    class Blog:
        def __init__(self, title, posts=None):
            self.title = title
            self.entries = posts if posts is not None else []
    
        def append(self, post):
            self.entries.append(post)
    
        def by_tag(self):
            tag_index = defaultdict()
            for post in self.entries:
                for tag in post.tags:
                    tag_index[tag].addend(post.as_dict())
            return tag_index
    
        def as_dict(self):
            return dict(
                title = self.title,
                underline = '='*len(self.title),
                entries = [p.as_dict() for p in self.entries]
            )
    
    
    travel = Blog("Travel")
    # 添加两条信息
    travel.append(
        Post(date=datetime.datetime(2014, 11, 14, 17, 25),
             title="Hard Aground",
             rst_text="""Some embarrassing revelation.
                    Including and cyr""",
             tags=("#RedRanger", "#Whiby42", "#ICW")
             )
    )
    travel.append(
        Post(date=datetime.datetime(2014, 11, 14, 17, 25),
             title="Hard Aground",
             rst_text="""Some embarrassing revelation.
                    Including and cyr""",
             tags=("#RedRanger", "#Whiby42", "#ICW"),
             )
    )
    travel.append(
        Post(date=datetime.datetime(2014, 11, 18, 15, 30),
             title="Anchor Follies",
             rst_text="""Some witty epigram.Including < & >
             character.""",
             tags=("#RedRanger", "#Whiby42", "#Mistakes"),
             )
    )
    

     这是后续需要序列化的对象travel,书中后面首先用这个对象的一些方法进行了Jinja2模块的渲染执行,我不写了,抄这个代码让我想睡觉。

    9.4使用JSON进行转储和加载

    我的理解JSON就是一种理想的数据交换语言。

    Python中json支持的类型与对应JSON的关系

    dict: object

    list,tuple: array

    str: string

    int, float: number

    True: true

    Flase: Flase

    None: null

    import json
    from t9_3 import travel
    
    print(json.dumps(travel.as_dict(), indent=4))
    

     序列化输出,效果不打了。

    我们将Python对象重写为字典,应该提供一种更好的装换方式,不必额外地创建字典(上面用了as_dict方法)

    不写了,这书中代码错误太多,截取代码也有问题,中文翻译更是垃圾,有空的时候当工具书看看就算了。

  • 相关阅读:
    zabbix自动发现 url 以及对http返回状态码监控实现 告警
    iOS 开发者账号到期续费流程
    iOS 开发 -----公司测试打包上传流程
    go语言 二叉树
    GO 语言队列实现
    GO 语言常用排序
    go 语言实现栈原理
    循环链表实现原理及运用约瑟夫环实例
    双向链表实现原理
    单向链表实现原理
  • 原文地址:https://www.cnblogs.com/sidianok/p/12337842.html
Copyright © 2020-2023  润新知