• Python标准库:pickle


    pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。

    序列化目的: 1、以某种存储形式使自定义对象持久化;

           2、将对象从一个地方传递到另一个地方;

           3、使程序更具维护性。

    pickle.dump(obj,file[,protocol])

    • obj:序列化对象,上面的例子中是一个列表,它是基本类型,也可以序列化自己定义的类型。
    • file:一般情况下是要写入的文件。更广泛地可以理解为为拥有 write() 方法的对象,并且能接受字符串为为 参数,所以,它还可以是一个 StringIO 对象,或者其它自定义满足条件的对象。
    • protocol:可选项。默认为 False(或者说 0),是以 ASCII 格式保存对象;如果设置为 1 或者 True,则 以压缩的二进制格式保存对象。
    import pickle
    
    # 用 pickle.dump(integers, f) 将数据 integers 保存到了文件 20.dat 中
    integer = [1, 2, 3, 4, 5]
    f = open("20.dat", "wb")
    pickle.dump(integer, f)

     pickle.load(),读取文件,也称为反序列化

    import pickle
    
    # 用 pickle.dump(integers, f) 将数据 integers 保存到了文件 20.dat 中
    integer = [1, 2, 3, 4, 5]
    f = open("20.dat", "wb")
    pickle.dump(integer, f)
    f.close()
    
    # 反序列化,读取文件
    integer = pickle.load(open("20.dat", "rb"))
    print(integer)

    文件大小比较

    import pickle
    import os
    import chardet
    
    d = {}
    integers = range(9999)
    d["i"] = integers
    print(d)
    
    # 下面将这个 dict 格式的对象存入文件
    f = open("21.dat", "wb")
    pickle.dump(d, f)
    f.close()
    
    # 显示文件编码格式
    ff = open("22.dat", "wb")
    pickle.dump(d, ff, True)
    ff.close()
    
    ff = open("22.dat", "rb")
    data = ff.read()
    print(chardet.detect(data))
    
    # 得到两个文件的大小
    s1 = os.stat("21.dat").st_size
    s2 = os.stat("22.dat").st_size
    
    print("%d, %d, %.2f%%" % (s1, s2, s2/s1 * 100))

    自定义类型

    import pickle
    from io import StringIO, BytesIO
    # 跟 file 功能类似,只不过是在内存中操作“文件”
    
    
    # 自定义一种类型
    class Book(object):
        def __init__(self, name):
            self.name = name
    
        def my_book(self):
            print("my book is:", self.name)
    
    
    book = Book("<from beginner to master>")
    book.my_book()
    
    file = BytesIO()
    pickle.dump(book, file, True)
    # 查看“文件”内容,注意下面不是乱码
    print(file.getvalue())
    
    # 换一种方式,再看内容,可以比较一下
    # 视觉上,两者就有很大差异
    pickle.dump(book, file)
    print(file.getvalue())
    
    # 如果要从文件中读出来:
    # 找到对应类型
    file.seek(0)
    book2 = pickle.load(file)
    book2.my_book()
    file.close()
    从现在开始,种下梦想中的参天大树
  • 相关阅读:
    关于Xcode的Other Linker Flags
    ios开发――解决UICollectionView的cell间距与设置不符问题
    源码篇:MBProgressHUD
    ios中VRGCalendarView日历控件
    Xcode6与Xcode5中沙盒的变动以及偏好设置目录的变动
    开发者总结的WatchKit App提交技巧
    iOS开发周报-- 第一期
    selective gaussian blur /adaptive-blur
    hader特效——“Barrel Blur”的实现
    OpenCV——径向模糊
  • 原文地址:https://www.cnblogs.com/dc2019/p/13252543.html
Copyright © 2020-2023  润新知