美文网首页
python的json,hashlib,base64模块

python的json,hashlib,base64模块

作者: 昆仑草莽 | 来源:发表于2019-05-05 12:51 被阅读0次

    这个章节我们主要来看json,haslib,base64模块,是python比较常用的模块,也是python在做项目时,前后端交互所必须的数据交换方式。

    json模块

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。人类很容易读写。机器很容易解析和生成。JSON是一种完全独立于语言的文本格式,用来传输有属性值货序列性的值组成的数据对象键值对。但使用C语言系列程序员熟悉的约定,包括C,C ++,C#,Java,JavaScript,Perl,Python等等。这些属性使JSON成为理想的数据交换语言。

    json语法规则:

    1、数据由键值对组成。
    2、键值对由逗号分隔。
    3、大括号里面保存对象。
    4、中括号里面保存数据。
    目前,互联网开发前后端数据交互使用的基本都是json数据


    import json
    
    data_dict = { #python 字典
        'name':'apple',
        'age':18,
        'sex':'M',
    }
    with open('test.py','a+') as f:
        json.dump(data_dict,fp=f)
        f.seek(0)
        print(f.read())
    输出:
    {"name": "apple", "age": 18, "sex": "M"} #JSON字符串
    Process finished with exit code 0
    
    import json
    
    data_dict = {
        'name':'apple',
        'age':18,
        'feature':['高','富','帅']
    }
    
    with open('test.py','w+') as f:
        res = json.dump(data_dict,fp=f,ensure_ascii=False,indent=4)
    
    with open('test.py','r')as file:
        rest = json.load(fp=file)
        print(rest['feature'][0])
    输出:
    高
    Process finished with exit code 0
    

    注意事项:
    1、字符串必须用双引号 " " 来包括。
    2、值可以是字符串、数字、true、False、null、列表、字典。

    python json
    字典 对象
    列表或元组 数组
    字符串 字符串
    int或float 数字
    True或False true或false
    None null
    json模块的API
    json的API API说明
    json.dumps(object) 将python数据转化位json indent实现缩进,ensure_ascii 是否用ascii解析
    json.loads(s) 将json数据转化位python数据
    json.dump(obj,fp) 转换位json,并保存到文件中
    json.load(fp) 从文件中读取json,并转换位python
    import json
    
    data_dict = {
        'name':'apple',
        'age':18,
        'sex':'M',
        'feature':['高','富','帅']
    }
    aa = json.dumps(data_dict,indent=4,ensure_ascii=True)
    print(aa)
    
    bb = json.loads(aa)
    print(bb)
    输出:
    {
        "name": "apple",
        "age": 18,
        "sex": "M",
        "feature": [
            "\u9ad8",
            "\u5bcc",
            "\u5e05"
        ]
    }
    {'name': 'apple', 'age': 18, 'sex': 'M', 'feature': ['高', '富', '帅']}
    
    Process finished with exit code 0
    
    import json
    
    data_dict = {
        'name':'apple',
        'age':18,
        'sex':'M',
        'feature':['高','富','帅']
    }
    
    
    with open('test.py','a+') as f:
        json.dump(data_dict,fp=f)
        f.seek(0)
        print(f.read())
    
    with open('test.py','r') as f:
        aa = json.load(fp=f)
        f.seek(0)
        print(aa)
    输出:
    {"name": "apple", "age": 18, "sex": "M", "feature": ["\u9ad8", "\u5bcc", "\u5e05"]}
    {'name': 'apple', 'age': 18, 'sex': 'M', 'feature': ['高', '富', '帅']}
    
    Process finished with exit code 0
    

    haslib模块

    数据时代,为了保证数据的安全性,防止数据外泄,往往对数据会进行加密,对一些敏感数据,加密措施就更加严密。
    加密是最常用的安防手段,利用技术手段,把重要的数据进行加密变为乱码传送,到达目的地后在用相同或不同的方法还原解密。
    1、对称加密:数据加密解密使用相同的密钥。
    2、非对称加密:数据加密和解密使用不同的密钥,公钥用于加密数据,私钥用于解密数据。
    3、单项加密:只能加密,不能解密数据。

    hash结构:

    散列函数,一般翻译为哈希,把输入的任意长度的数据,通过散列函数进行转换,变成一个长度固定的值(散列值),这个值基本是唯一的,简单来说,hash算法就是将任意长度的数据变为固定长度的数据的函数。

    特点:

    1、不可逆:无法根据散列值来还原原来的数据值。
    2、定长输出:无论输入的原始数据有多长,结果长度是相同的。
    3、抗修改性:输入数据的微小改变,哪怕只有一个字符,会引起结果的巨大改变。
    4、强碰撞性:很难找到两端内容不同的数据,使他们产生的hash值一致,这几乎使不可能的。

    hashlib模块提供的API

    hashlib模块提供了很多算法,主要有:
    1、md5
    2、SHA系列:sha1、sha224、sha256、sha384、sha512.
    hashlib模块的API:

    hashlib的API API说明
    hashlib.new(name,data='b') 生成一个hash对象
    hashlib.hash算法名(data='b') 生成一个使用该算法的hash对象
    hash对象.update(arg=None) 更新hash对象
    hash对象.digest() 返回hash算法计算所得到的值(bytes类型)
    hash对象.hexdigest() 返回hash算法计算所得到的值(str类型)
    import hashlib
    
    messages_shici = '''
    君不见,黄河之水天上来,奔流到海不复回。
    君不见,高堂明镜悲白发,朝如青丝暮成雪。
    人生得意须尽欢,莫使金樽空对月。
    天生我材必有用,千金散尽还复来。
    烹羊宰牛且为乐,会须一饮三百杯。
    岑夫子,丹丘生,将进酒,杯莫停。
    与君歌一曲,请君为我倾耳听。
    钟鼓馔玉不足贵,但愿长醉不复醒。
    古来圣贤皆寂寞,惟有饮者留其名。
    陈王昔时宴平乐,斗酒十千恣欢谑。
    主人何为言少钱,径须沽取对君酌。
    五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。
    '''
    
    hash = hashlib.md5(messages_shici.encode()) #参数一定必须是bytes类型
    print(hash.hexdigest()) #获得str类型
    print(hash.digest()) #获得bytes结果
    输出:
    1eaaaec8f67d06d7e7321cb28fc5d788
    b'\x1e\xaa\xae\xc8\xf6}\x06\xd7\xe72\x1c\xb2\x8f\xc5\xd7\x88'
    Process finished with exit code 0
    
    base64模块(url编码)

    正常的url中只能包含ASCII字符的,也就是字母、数字和一些符号,url编码就是一种规避一些特俗字符(比如汉字)的编码方式。
    base64是一种利用64个字符来表示任意二进制的数据方法,(将二进制数据编码成ASCII字符),使用了A-Z、a-z、0-9、+、/这64个字符。

    特点:

    1、用来将非ASCII字符转换为ASCII字符的一种方法
    2、常用于对url的编码
    3、可以将不可打印的二进制数据转换为可打印的字符串。

    base64b模块的API

    Base64编码后的数据可能会含有 + / 两个符号,如果编码后的数据用于URL或文件的系统路径中,就可能导致Bug,所以base模块提供了专门编码url的方法

    API 描述
    base64.b64encode(s) 对二进制数据进行base64编码
    base64.b64decode(s) 对通过base64编码的数据进行解码
    base64.urlsafe_b64encode(s) 对url进行编码
    base64.urlsafe_b64decode(s) 解码
    import base64
    
    data = 'beijing'.encode()
    #编码
    d_encode = base64.b64encode(data)
    print('编码数据:{}'.format(d_encode))
    
    #解码
    d_decode = base64.b64decode(d_encode)
    print('解码数据:{}'.format(d_decode))
    输出:
    编码数据:b'YmVpamluZw=='
    解码数据:b'beijing'
    
    Process finished with exit code 0
    
    import base64
    
    data = 'http://baidu.com'.encode()
    #编码
    d_encode = base64.urlsafe_b64encode(data)
    print('编码数据:{}'.format(d_encode))
    
    #解码
    d_decode = base64.urlsafe_b64decode(d_encode)
    print('解码数据:{}'.format(d_decode))
    输出:
    编码数据:b'aHR0cDovL2JhaWR1LmNvbQ=='
    解码数据:b'http://baidu.com'
    
    Process finished with exit code 0
    

    相关文章

      网友评论

          本文标题:python的json,hashlib,base64模块

          本文链接:https://www.haomeiwen.com/subject/wpwynqtx.html