• Python学习 :json、pickle&shelve 模块


    数据交换格式

    json 模块

    json (JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 json 是JavaScript的一个子集,但 json 是独立于语言的文本格式,并且采用了类似C语言家族的一些习惯

    json 建构于两种结构基础之上:

    1、'名称/值'对的集合。在不同的语言中,它被理解为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list)或者关联数组(associative array)

    2、值的有序列表(An ordered list of values)。在某些语言中,它被理解为数组(array),类似于Python中的类表

    json 模块的主要功能:

    1、序列化:encoding,把一个Python对象编码转化成JSON字符串

    2、反序列化:decoding,把JSON格式字符串解码转换为Python数据对象

    序列化的两种方法

    # dumps 方法
    import json
    dic = {'name':'alex','age':'25'}
    data = json.dumps(dic)
    f = open('test','w')
    f.write(data)
    f.close()
    
    # dump 方法
    import json
    dic = {'name':'mike','age':'20'}
    f = open('test','a')
    json.dump(dic,f) # 不用再手动去写入文件中
    f.close()
    

    反序列化的两种方法

    # loads 方法
    import json
    f = open('test','r')
    data = f.read()  # 在json文件中的并不是字典,而是json的一种字符串格式
    data = json.loads(data)  # 把json数据重新转换成为字典类型
    print(data['name'])
    
    # load 方法
    import json
    f = open('test','r')
    a = json.load(f)  # 不用手动去read json中的数据
    print(a['name'])
    

    pickle 模块

    对于类和函数对象,json不能进行序列化,可以使用 pickle 模块来进行相应的操作

    pickle 模块只能用于Python中,不同版本的Python可能彼此都不兼容,因此,只能用Pickle保存那些不重要的数据

    pickle 写入方式:

    import pickle
    
    def foo():
        print('Hello World!')
    
    data = pickle.dumps(foo)
    f = open('test1','wb')
    f.write(data)
    f.close()
    

    pickle 的读取方式与 json 模块一致,同为 dump ,dumps 函数

    shelve 模块

    shelve 模块是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化

    shelve 使用方式:

    import shelve
    
    with shelve.open("shelve_test") as f:
        f["name"] = 'alex'
        f["age"] = '25'
    # 这里直接保存到了文件中,生成了3个文件shelve_test.bak,shelve_test.dat,shelve_test.dir
    
    with shelve.open('shelve_test') as f:  # 只使用shelvefile名字即可
        print(f["name"])
    
        for key, value in f.items():
            print(key, ': ', value)
     >>> alex
         age :  25
         name :  alex
    
  • 相关阅读:
    顺序队列的模板
    链式队列模板
    链式栈模板
    栈应用hanoi
    判断出栈顺序
    用栈实现四则运算
    两栈共享问题
    The Preliminary Contest for ICPC Asia Nanjing 2019
    Educational Codeforces Round 71 (Rated for Div. 2)
    HDU6583:Typewriter(dp+后缀自动机)
  • 原文地址:https://www.cnblogs.com/ArticleYeung/p/9911088.html
Copyright © 2020-2023  润新知