json&pickle模块、configparse/hashlib/subprocess 模块

一、json 与pickle模块

序列化:

1、什么是序列化&反序列化

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

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

2、为何要序列化

序列化得到结果=>特定的格式的内容有两种用途

1、可用于存储=》用于存档

2、传输给其他平台使用=》跨平台数据交互

?

强调:

针对用途1的特定一格式:可是一种专用的格式=》pickle只有python可以识别

针对用途2的特定一格式:应该是一种通用、能够被所有语言识别的格式=》json

3、如何序列化与反序列化

示范1

import json
# 序列化
import json
json_res=json.dumps([2,‘bbb‘,False,True])
print(json_res,type(json_res))  #[2, "bbb", false, true] <class ‘str‘>

# 反序列化
l=json.loads(json_res)
print(l,type(l))  #[2, ‘bbb‘, False, True] <class ‘list‘>

示范2:

序列化的结果写入文件的复杂方法

with open(‘test.json‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
    f.write(json_res)

将序列化的结果写入文件的简单方法

with open(‘test.json‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
    json.dump([2,‘bbb‘,False,True],f)

从文件读取json格式的字符串进行反序列化操作的复杂方法

with open(‘test.json‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
    json_res=f.read()
    l=json.loads(json_res)

从文件读取json格式的字符串进行反序列化操作的简单方法

with open(‘test.json‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
    l=json.load(f)

json 兼容性:

json验证: json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有的类型

集合是python独有的数据类型

json.dumps({1,2,3,4,5})  #报错:Object of type set is not JSON serializable

json强调:一定要搞清楚json格式,不要与python混淆

l=json.loads(‘[1, "aaa", true, false]‘)  #属于json 的数据格式可以序列化
l=json.loads("[1,1.3,true,‘aaa‘, true, false]")  #不属于josn的数据格式,报错

可以将json类型的字节反序列化

l=json.loads(b‘[1, "aaa", true, false]‘)
print(l,type(l))  #[1, ‘aaa‘, True, False] <class ‘list‘>
res=json.dumps({‘name‘:‘哈哈哈‘})
print(res,type(res))  #{"name": "\u54c8\u54c8\u54c8"} <class ‘str‘>

4、猴子补丁

在入口处打猴子补丁
import json
import ujson

def monkey_patch_json():
    json.__name__ = ‘ujson‘
    json.dumps = ujson.dumps
    json.loads = ujson.loads
# monkey_patch_json() # 在入口文件出运行
import ujson as json  # 不能直接导入ujson该别名成json

5、pickle模块

pickle模块的基本用法和json相同,只能用于python序列化和反序列化

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

s=pickle.loads(res)
print(s,type(s))

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

def register():
    import json
    dic = {}
    name = input(‘输入账号: ‘).strip()
    pwd = input(‘输入密码: ‘).strip()
    pwd1 = input(‘确认密码: ‘).strip()
    if pwd1 == pwd:
        dic[name] = pwd
        with open(‘test.json‘, mode=‘at‘, encoding=‘utf-8‘)as f:
            json.dump(dic, f)

register()

二、configparser模块

import configparser

config = configparser.ConfigParser()
config[‘interface‘] = {}
config[‘interface‘][‘length‘] = ‘200‘
config[‘interface‘][‘width‘] = ‘100‘
config[‘file_path‘] = {}
config[‘file_path‘][‘src_file‘] = ‘a.txt‘
config[‘file_path‘][‘dst_file‘] = ‘b.txt‘
with open(‘setting.ini‘, ‘w‘) as configfile:

config=configparser.ConfigParser()
config.read(‘setting.ini‘)
#查看所有的标题
res=config.sections()
print(res)  #[‘interface‘, ‘file_path‘]

#查看标题interface下所有key=value的key
options=config.options(‘interface‘)
print(options)  #[‘length‘, ‘width‘]

#查看标题interface下user的值=>字符串格式
val=config.get(‘interface‘,‘length‘)
print(val)  #200

#查看标题interface下length的值=>整数格式
val1 = config.getint(‘interface‘, ‘length‘)
print(val1, type(val1))  #200 <class ‘int‘>

#config.getboolean()   config.getfloat()

# 删除整个标题interface
config.remove_section(‘interface‘)

#判断标题file_path下是否有dst_file
print(config.has_option(‘file_path‘,‘dst_file‘))

#添加一个标题
config.add_section(‘typeface‘)

#在标题typeface下添加name=‘18‘的配置
config.set(‘typeface‘,‘size‘,‘18‘)

#最后将修改的内容写入文件,完成最终的修改
config.write(open(‘setting.ini‘,‘w‘))
‘‘‘
[interface]
length = 200
width = 100

[file_path]
src_file = a.txt
dst_file = b.txt

[typeface]
size = 18
‘‘‘

三、hashlib模块

1、什么是哈希hash

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

特点:

1 只要传入的内容一样,得到的hash值必然一样

2 不能由hash值返解成内容

3 不管传入的内容有多大,只要使用的hash算法不变,得到的hash值长度是一定

2、hash的用途

1 特点2用于密码密文传输与验证

2 特点1、3用于文件完整性校验

3、如何用

import hashlib

m = hashlib.md5()
m.update(‘you‘.encode(‘utf-8‘))
m.update(‘are‘.encode(‘utf-8‘))
m.update(‘beautiful‘.encode(‘utf-8‘))
res = m.hexdigest()
print(res)  # 1cca676950dfbab0c08b0f9b2fc5ed4c

不管怎么传只有内容一样,算法一样,hash值就一样

m.update(‘yo‘.encode(‘utf-8‘))
m.update(‘uarebeauti‘.encode(‘utf-8‘))
m.update(‘ful‘.encode(‘utf-8‘))
res=m.hexdigest()
print(res)  #1cca676950dfbab0c08b0f9b2fc5ed4c

模拟撞库得到密码

password = [‘abcd123‘,
            ‘abcd321‘,
            ‘abcd231‘]

cryptogragh = ‘72113b401a454ea7ebac1f2051b9d05f‘ #‘abcd321‘
dic = {}

for p in password:
    res = hashlib.md5(p.encode(‘utf-8‘))
    dic[p] = res.hexdigest()

dic = {}
for p in password:
    res = hashlib.md5(p.encode(‘utf-8‘))
    dic[p] = res.hexdigest()

for k, v in dic.items():
    if v == cryptogragh:
        print(f‘撞库成功,明文密码是{k}发财了!‘)  #撞库成功,明文密码是abcd321发财了!
        break

提升撞库的成本=>密码加盐

import hashlib

m=hashlib.md5()

m.update(‘小鸡‘.encode(‘utf-8‘))
m.update(‘abcd321‘.encode(‘utf-8‘))
m.update(‘炖蘑菇‘.encode(‘utf-8‘))
print(m.hexdigest())

四、 subprocess 模块

import subprocess

obj=subprocess.Popen(‘echo 123 ; ls / ; eccc123‘,shell=True,
                 stdout=subprocess.PIPE,  #正确命名的管道
                 stderr=subprocess.PIPE,  #错误命名的管道
                 )

print(obj)
res=obj.stdout.read()
print(res.decode(‘utf-8‘))

err_res=obj.stderr.read()
print(err_res.decode(‘utf-8‘))

原文地址:https://www.cnblogs.com/zhangtieshan/p/12609772.html

时间: 2024-11-10 14:18:04

json&pickle模块、configparse/hashlib/subprocess 模块的相关文章

python 常用模块 time random os模块 sys模块 json &amp; pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,

8.模块介绍 time &amp;datetime模块 random os sys shutil json &amp; picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.p

pickle\json,configparser,hashlib模块

python常用模块 目录 python常用模块 json模块\pickle模块 configparser模块 hashlib模块 subprocess模块 json模块\pickle模块 首先说一下序列化和反序列化 . 序列化:将数据内容转化成一种特定的格式. 反序列化:将特定的格式在转化成数据内容. 其实我们之前学过序列化和反序列化的方法,即将内存中的数据转化为字符串的格式存进文件中,在从文件中利用eval()的方法反序列化出来.这也是一种方法,但是现在有更方便的方法. json模块是个序列

time/datetime/os/sys/json/pickle/hashlib/hmac/logging 模块

python常用模块 1.time 模块 # 时间戳:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. time_stamp=time.time() print(time_stamp,type(time_stamp)) # 1552551519.291029 <class 'float'> # 格式化时间:格式化的时间字符串(format string):格式化时间表示的是普通的字符串格式的时间. format_time=time.strftime("%Y-%

【python】-- json &amp; pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess

json & pickle Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load 1.dumps序列化和loads反序列化 dumps()序列化 import json #导入json模块 info = { 'name':"zhangqigao", &qu

python学习-xml处理,yaml处理,hashlib,subprocess模块

xml处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过<>节点来区别数据结构的: 1 <?xml version="1.0"?> 2 <data> 3 <country name="Liechtenstein"> 4 <rank updated="yes&qu

json模块与hashlib模块的使用

"""# json&pickle模块# 1.什么是序列化# 2.为何要有序列化# 3.如何做序列化与反序列化1.序列化指的是把内存数据类型转换成一个特定格式的内容,该格式的内容可用于存储或传输给其他平台使用内存的数据类型------>序列化----------->特定格式(json.pickle模式)内存的数据类型<-------反序列化<---------特定格式(json.pickle模式)2.如何要有序列化?序列化得到结果---->

python开发模块基础:序列化模块json,pickle,shelve

一,为什么要序列化 # 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化'''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(dic)的

Python学习笔记——基础篇【第五周】——json &amp; pickle 模块

json & pickle 模块(序列化) 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load dumps和dump区别: pickle.dump(info,f) #print(pickle.dumps(info)) #f.write(pick