python的json,hashlib,base64模块

这个章节我们主要来看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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容