IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python知识——序列化、JSON函数、pickle、configparser、hashlib模块 -> 正文阅读

[Python知识库]Python知识——序列化、JSON函数、pickle、configparser、hashlib模块

序列化 & 反序列化

把内存的数据类型转换成一种特定的格式,该格式的内容可用于存储或者传输给其他平台使用

内存中的数据类型——>序列化——>特定的格式(json格式或者pickle格式)
内存中的数据类型<——反序列化<——特定的格式(json格式或者pickle格式)

用途:

  1. 可用于存储——>用于存档
  2. 传输给其他平台使用——>跨平台数据交互

针对用途1的特定格式:可以用一种专用的格式——>pickle 只有python可以识别
针对用途2的特定格式:应该是一种通用,能够被所有语言识别的格式=》json

如何序列化与反序列化

JSON函数:

json.dumps 将 Python 对象编码成 JSON 字符串

import json

#序列化
dumps_res=json.dumps([1,'aaa',True,False])
print(dumps_res,type(dumps_res))

'''
[1, "aaa", true, false] <class 'str'>
'''

json.loads 将已编码的 JSON 字符串解码为 Python 对象

#反序列化
loads_res=json.loads(dumps_res)
print(loads_res,type(loads_res))

'''
[1, 'aaa', True, False] <class 'list'>
'''

将一个数据序列化后的内容存储在文件当中,再反序列

dumps_res=json.dumps([1,'aaa',True,False])
 with open(r'D:\python\text.txt',mode='wt',encoding='UTF-8') as f:
    f.write(dumps_res)

with open(r'D:\python\text.txt',mode='rt',encoding='UTF-8') as f:
    loads_res=f.read()
    l=json.loads(loads_res)
    print(l)

'''
[1, 'aaa', True, False]
'''

在这里插入图片描述
上述的简单方法:
json.dump

with open(r'D:\python\text.txt',mode='wt',encoding='UTF-8') as f:
	json.dump([1,'aaa',True,False],f)

在这里插入图片描述

json.load

with open(r'D:\python\text.txt',mode='rt',encoding='UTF-8') as f:
	l=json.load(f)
	print(l)

'''
[1, 'aaa', True, False]
'''

python 原始类型向 json 类型的转化对照表:

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

Python中集合类型无法转化为JSON类型

猴子补丁


import json
import ujson


def monkey_patch_json():
    json.__name__ = 'ujson'
    json.dumps = ujson.dumps
    json.loads = ujson.loads


monkey_patch_json()  # 在入口文件处运行

pickle模块

import pickle
res=pickle.dumps({1,2,3,5,6})
print(res,type(res))

'''
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\x01K\x02K\x03K\x05K\x06\x90.' 
<class 'bytes'>
'''

注意
在python3中执行的序列化操作如何兼容python2?

python2不支持protocol>2,默认python3中protocol=4,所以在python3中dump操作应该指定protocol=2
pickle.dump('你好啊',protocol=2)

configparser模块

ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section), 每个节可以有多个参数(键=值)。使用的配置文件的好处就是不用在程序员写死,可以使程序更灵活。

注意:在python 3 中ConfigParser模块名已更名为configparser

#text.ini文件下:

[section1]
k1=v1
k2:v2
user=egon
age=18
is_admin=true
salary=31


[section2]
k3=3
import configparser

confi=configparser.ConfigParser()
confi.read(r'D:\python\text.ini')

#获取sections 
print(confi.sections())

#获取某个section下的所有options
print(confi.options('section1'))

#获取items
print(confi.items('section1'))

#获取某个特定的值
print(confi.get('section1','user'))


'''
['section1', 'section2']
['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'),
 ('salary', '31')]
egon
'''

hashlib模块

hash一类算法,该算法接受传入的内容,经过计算得到一串hash值

hash值的特点:

  1. 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验

  2. 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码

  3. 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的

用途1:特点2用于密码密文传输与验证
用途2:特点1、3用于文件完整性校验

特点1、3的验证:

import hashlib

m = hashlib.md5()
m.update('hello'.encode('utf-8'))
m.update('world'.encode('utf-8'))
res = m.hexdigest()
print(res)


m1 = hashlib.md5()
m1.update('he'.encode('utf-8'))
m1.update('llo'.encode('utf-8'))
m1.update('world'.encode('utf-8'))
ret = m1.hexdigest()
print(ret)

'''
fc5e038d38a57032085441e7fe7010b0
fc5e038d38a57032085441e7fe7010b0
'''

如何使用hashlib

撞库:

m='A20080306qwer'   #明文密码
m_md5=hashlib.md5(m.encode('utf-8'))
m_m=m_md5.hexdigest()
m_m='f4921bfc59d1c4b1ba09b38a2e122716'   #以md5转化了密文

passwds=[
    'E1996325FGHY',
    'A20080306qwer',
    '2000306asdf',
    'qwer20080306A',
    'A16669852cyem'
]
#密码库,通过事先猜测密码,形成明文密码库

dir={}
for p in passwds:
    res=hashlib.md5(p.encode('utf-8'))   #将密码库的密码用md5方式转化
    dir[p]=res.hexdigest()             #并形成字典,明文密码:密文密码

# print(dir)
for k,v in dir.items():
    if v == m_m:     #对比密码库中的密文密码与截获到的密文密码进行对比
        print('撞库成功,密码是%s'%k)   #打印出明文密码
        break
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 19:27:40  更:2021-07-04 19:28:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 2:09:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计