json,pickle,configparser,hashlib,subprocess

json:

序列化:把内存的数据类型转换成一个特定的格式内容,这种格式可以存储或者传输给其他平台

内存中的数据 ----> 序列化 ----> 特定的格式(json,pickle) 内存中的数据 <---- 反序列化 <----特定的格式(json,pickle)

强调:

  1. 可用于存储,是一种专门的格式
  2. 可以跨平台数据交互,能被其他语言识别

 

json强调:识别不了set,tuple

  1. json格式的字符串要用双引号表示
  2. 兼容所有是语言通用的数据类型,不能识别某一语言的所独有的类型
import json # 序列化
json_res=json.dumps([1,aaa,True,False]) # print(json_res,type(json_res)) # "[1, "aaa", true, false]"

# 反序列化
l=json.loads(json_res) print(l,type(l))
import json # 序列化的结果写入文件的复杂方法
json_res=json.dumps([1,aaa,True,False]) # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
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([1,aaa,True,False],f) # 从文件读取json格式的字符串进行反序列化操作的复杂方法
with open(test.json,mode=rt,encoding=utf-8) as f: json_res=f.read() l=json.loads(json_res) print(l,type(l)) # 从文件读取json格式的字符串进行反序列化操作的简单方法
with open(test.json,mode=rt,encoding=utf-8) as f: l=json.load(f) print(l,type(l))

pickle:

import pickle res=pickle.dumps({1,2,3,4,5}) print(res,type(res)) #得到一个二进制
 s=pickle.loads(res) print(s,type(s)) # 返回一个set

configparser:

import configparser config=configparser.ConfigParser() config.read(test.ini) # 1、获取sections
print(config.sections()) # 2、获取某一section下的所有options
print(config.options(section1)) # 3、获取items
print(config.items(section1)) # 4、获得section下的user
res=config.get(section1,user) print(res,type(res)) # 5、获得section下的age
res=config.getint(section1,age) print(res,type(res)) 

hashlib:

  1. hash的一类算法,该算法接受传入的内容,得到一串hash值
  2. hash值的特点:
    • 只要传入的内容一样,得到的hash值也是一样的
    • 不管传入的内容多大,只要hash算法不变,得到hash值的长度也是不变
    • 不能由hash值反推传入的内容(用于密码密文传输与验证)
import hashlib m=hashlib.md5() m.update(hello.encode(utf-8)) m.update(world.encode(utf-8)) res=m.hexdigest() # ‘helloworld‘
print(res)
# 模拟撞库
cryptograph=aee949757a2e698417463d47acac93df
import hashlib # 制作密码字段
passwds=[ alex3714, alex1313, alex94139413, alex123456, 123456alex, a123lex, ] dic={} for p in passwds: res=hashlib.md5(p.encode(utf-8)) dic[p]=res.hexdigest() # 模拟撞库得到密码
for k,v in dic.items(): if v == cryptograph: print(撞库成功,明文密码是:%s %k) break


# 提升撞库的成本=>密码加盐
import hashlib m=hashlib.md5() m.update(天王.encode(utf-8)) m.update(alex3714.encode(utf-8)) m.update(盖地虎.encode(utf-8)) print(m.hexdigest())

subprocess:

import subprocess obj = subprocess.Popen(tasklist, shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,) print(obj) res = obj.stdout.read() print(res.decode(gbk)) err_res = obj.stderr.read() print(err_res.decode(gbk))