Python模块02/序列化/os模块/sys模块/haslib加密/collections
Python模块02/序列化/os模块/sys模块/haslib加密/collections
内容大纲
1.序列化
2.os模块
3.sys模块
4.haslib加密
5.collections
1.序列化
1.1 什么是序列化
# 什么是序列化 -- json
序列化模块就是将一个常见的数据结构转化成一个特殊的序列,并且这个特殊的序列还可以反解回去。它的主要用途:文件读写数据,网络传输数据。
# lit = [1,22,3,3,45]  # [1,22,3,3,45]
# s_lst = str(lit)
# print(s_lst,type(s_lst))
# print(list(s_lst))
# print(eval(s_lst))  # 禁止使用
1.2 json模块(重点)
json序列化只支持部分Python数据结构:
dict,list, tuple,str,int, float,True,False,None
json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去。
用于网络传输:dumps、loads
用于文件写读:dump、load
1.dumps loads
            dumps 将对象转换(序列化)成字符串
            loads 将字符串转换(反序列化)成对象
		   将列表类型转换成字符串类型
            # lit = [1,22,3,3,45]
            # print(json.dumps(lit),type(json.dumps(lit)))
            # str_lst = json.dumps(lit)
            将字符串类型的字典转换成列表类型
            # lst = json.loads(str_lst)
            # print(lst,type(lst))
            将字典类型转换成字符串类型
            # dic = {'username':'宝元'}
            # str_dic = json.dumps(dic)  # 序列化
            # str_dic = json.dumps(dic,ensure_ascii=False)
            ensure_ascii=False 关闭ascii码
            # print(str_dic,type(str_dic))
            将字符串类型的字典转换成字典类型
            # dic1 = json.loads(str_dic)  # 反序列化
            # print(dic1,dic1["username"])
2.dump、load
           dump: 将对象转换(序列化)成字符串,写入文件
           load: 将文件中字符串转换(反序列)成对象
           将对象转换成字符串写入到文件当中
           #import json
	       #f = open('json_file.json','w')
	       #dic = {'k1':'v1','k2':'v2','k3':'v3'}
		   #json.dump(dic,f)
        	将文件中的字符串类型的字典转换成字典
             import json
			f = open('json_file.json')
			dic2 = json.load(f)
			f.close()
			print(type(dic2),dic2)
		    f.close()
dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
json序列化存储多个数据到同一个文件中
# 对于json序列化,存储多个数据到一个文件中是有问题的,
#默认一个json文件只能存储一个json数据,但是也可以解决,
#举例说明:
            # import json
            # lit = [1,22,3,3,45]
            # 同时写多个内容 进行序列化
            # lst = [1,2,3,4,56,]
            # f = open("info","w",encoding="utf-8")
            # f.write(json.dumps(lst) + "\n")
            # f.write(json.dumps(lst) + "\n")
            # f.write(json.dumps(lst) + "\n")
            # f.write(json.dumps(lst) + "\n")
            # f.write(json.dumps(lst) + "\n")
            # f.close()
            # 同时读多个内容进行反序列
            # f1 = open("info","r",encoding="utf-8")
            # for i in f1:
            #     l = json.loads(i)
            #     print(l)
            # f1.close()
总结:
    ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(,,:);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
1.3pickle模块
pickle模块是将Python所有的数据结构以及对象等转化成bytes类型,
然后还可以反序列化还原回去
python所有对象进行转换
python自带的(只有python可以用)
# 两组4个方法:
#1. dumps loads
        # import pickle
        # lst = [12,3,4,5,768]
        # t_list = pickle.dumps(lst) # 转换成类似字节
        # print(t_list)
        # print(pickle.loads(t_list)[-1])
        # dic = {"user":"郭宝元"}
        # t_list = pickle.dumps(dic) # 转换成类似字节
        # print(t_list)
        # print(pickle.loads(t_list))
        # def func():
        #     print(111)
        # import json
        # fun = json.dumps(func)
        # print(fun)
        # fun = pickle.dumps(func)
        # print(fun)
        # pickle.loads(fun)()
#2. dump  load
# import pickle
# dic = {"usern":"baoyuian"}
# dic = {"usern":"宝元"}
# pickle.dump(dic,open("info","wb"))
# print(pickle.load(open("info","rb")))
# import pickle
# dic = {"user":"123"}
# pickle.dump(dic,open("info","ab"))
# import pickle
# dic = {"1":2}
# f = open("info","wb")
# s = "\n".encode("utf-8")
# f.write(pickle.dumps(dic)+ s)
# f.write(pickle.dumps(dic)+ s)
# f.write(pickle.dumps(dic)+ s)
# f.close()
#
# f1 = open("info","rb")
# for i in f1:
#     print(pickle.loads(i))
推荐使用json
#   json是各种语言通用的
#   pickle(python私有)
# asdfasd
2.os模块
程序员通过python向操作系统发送指令(与操作系统交互的接口)
# os模块四组:
1.工作目录
# import os
# os.chdir("F:\s24\day06") # 路径切换
# print(os.curdir)  # 当前
# print(os.pardir)  # 父级
print(os.getcwd()) # 当前工作路径  ***
2.文件夹
# import os
os.mkdir("ttt") # 创建一个文件夹  ***
os.rmdir("ttt") # 删除一个文件夹  ***
os.makedirs("ttt/sss/ddd/ee")  # 递归创建文件夹     ***
os.removedirs("ttt/sss/ddd/ee")  # 递归删除文件夹   ***
print(os.listdir(r"F:\s24\day17"))  ***
3.文件
# import os
os.rename()  # 修改名字   ***
os.remove("info") # 删除文件  ***
4.路径
import os
print(os.path.abspath(r"01 今日内容.py"))  # 通过相对路径获取绝对路径  ***
# print(os.path.split(os.path.abspath(r"01 今日内容.py")))  #将路径以最后一个\切割(路径,文件名)
print(os.path.dirname(r"F:\s24\day17\01 今日内容.py"))  # 获取路径 ***
# print(os.path.basename(r"F:\s24\day17\01 今日内容.py")) # 获取文件名 **
print(os.path.exists(r"F:\s24\day17\01 今日内容.py"))  # 判断这个路径是否存在  ***
print(os.path.isdir(r"F:\s24\day17"))     # 判断是不是路径  ***
print(os.path.isfile(r"01 今日内容.py"))  # 判断是不是文件  ***
# print(os.path.isabs(r"F:\s24\day17\01 今日内容.py"))     # 判断是不是绝对路径
print(os.path.join("D:\\\\","ttt","bbb"))    # 路径拼接 *****
# import time
# print(time.time())
# print(os.path.getatime(r"F:\s24\day17\04 序列化.py"))      # 最后的修改时间
# print(os.path.getctime(r"F:\s24\day17\04 序列化.py"))      # 最后的访问时间
# print(os.path.getmtime(r"F:\s24\day17\04 序列化.py"))      # 最后的访问时间
print(os.path.getsize(r"F:\s24\day09")) # 获取当前文件的大小***
3.sys模块
与python解释器交互的接口
# import sys
# if sys.argv[-1] == "alex":
#     print("dsb")
# else:
#     print("李业dsb")
print(sys.argv[-1]) # *** 当前文件运行['F:/s24/day17/06 sys.py']
# import sys
# print(sys.exit(1))   
# import sys
# print(sys.version)  # 获取解释器版本
import sys
print(sys.path)     # 添加自定义模块查找路径 *****
import sys
print(sys.platform)   # *** 区分操作系统然后进行相关逻辑操作
4.hashlib 加密模块
4.1 密码的加密
1.hashlib 加密:
你的密码是明文的,如果有人可以窃取到这个文件,那么你的密码就会泄露了。所以,一般我们存储密码时都是以密文存储,此模块有人称为摘要算法,也叫做加密算法,或者是哈希算法,散列算法等
2.工作原理简述:
通过一个函数,把任意长度的数据按照一定规则转换为一个固定长度的数据串
3.应用:
密码的加密
文件一致性校验
# alex:alex123
# alex:23lw23jky321jh4gqyt1234gj8b7t  # 加密后
# {"1234":23lw23jky321jh4gqyt1234gj8b7t}
md5,sha1,sha256,sha512
1.只要明文相同密文就是相同的
2.只要明文不相同密文就是不相同的
3.不能反逆(不能解密) -- md5中国人破解了
# alex:alex123
# alex:b75bd008d5fecb1f50cf026532e8ae67
# print(len("b75bd008d5fecb1f50cf026532e8ae67"))
加密:
    1.加密的内容
    2.将要加密的内容转成字节
# import hashlib
# md5 = hashlib.md5()
# md5.update("alex123".encode("utf-8"))
# print(md5.hexdigest())
#
# md5 = hashlib.md5()
# md5.update("alex".encode("utf-8"))
# print(md5.hexdigest())
# md5 = hashlib.md5()
# md5.update("alex123".encode("gbk"))
# print(md5.hexdigest())
# md5 = hashlib.md5()
# md5.update("alex123".encode("shift-jis"))
# print(md5.hexdigest())
# import hashlib
# sha1 = hashlib.sha256()
# sha1.update("alex123".encode("utf-8"))
# print(sha1.hexdigest())
# md5 = hashlib.md5()
# md5.update("alex123".encode("utf-8"))
# print(md5.hexdigest())
最常用是的md5,平时加密的时候使用sha1
加盐
加固定盐
# import hashlib
# md5 = hashlib.md5("常鑫".encode("utf-8"))
# md5.update("alex123".encode("utf-8"))
# print(md5.hexdigest())
#
# md5 = hashlib.md5()
# md5.update("alex123".encode("utf-8"))
# print(md5.hexdigest())
动态加盐
# user = input("username:")
# pwd = input("password")
#
# import hashlib
# md5 = hashlib.md5(user.encode("utf-8"))
# md5.update(pwd.encode("utf-8"))
# print(md5.hexdigest())
# md5 = hashlib.md5()
# md5.update(pwd.encode("utf-8"))
# print(md5.hexdigest())
# 767db14ed07b245e24e10785f9d28e29
# f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
# import hashlib
# md5 = hashlib.md5()
# md5.update(f.read())
# print(md5.hexdigest())
# ss = "baoyuanalextaibai"
# s = "baoyuan"
# s1 = "alex"
# s2 = "taibai"
# import hashlib
# md5 = hashlib.md5()
# md5.update(ss.encode("utf-8"))
# print(md5.hexdigest())
#
#
# md5 = hashlib.md5()
# md5.update(s.encode("utf-8"))
# md5.update(s1.encode("utf-8"))
# md5.update(s2.encode("utf-8"))
# print(md5.hexdigest())
# 节省内存
4.2 文件的一致性校验
#在我们下载一个软件时,往往都带有一个MD5或者shax值,当我们下载完成这个应用程序时你要是对比大小根本看不出什么问题,你应该对比他们的md5值,如果两个md5值相同,就证明这个应用程序是安全的,如果你下载的这个文件的MD5值与服务端给你提供的不同,那么就证明你这个应用程序肯定是植入病毒了(文件损坏的几率很低),那么你就应该赶紧删除,不应该安装此应用程序。
# f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
# import hashlib
# md5 = hashlib.md5()
# while True:
#     msg = f.read(1024)
#     if msg:
#         md5.update(msg)
#     else:
#         print(md5.hexdigest())
#         break
5.collections模块
# 1.namedtuple: 生成可以使用名字来访问元素内容的tuple
# 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
# 3.OrderedDict: 有序字典
# 4.defaultdict: 带有默认值的字典
5.Counter: 计数器,主要用来计数
from collections import namedtuple,deque
# Point = namedtuple('tu',["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
# p = Point({"keu":(1,2,3,4)}, 20,10)
# print(p)
# tu = (1,2,32,34,4)
# print(tu)
# lst = deque([1,2,3,4,5,6,7])
# lst.append(8)
# lst.appendleft(0)
# lst.pop()
# lst.popleft()
# print(lst[4])
# 队列:先进先出
# 栈:先进后出  --  栈顶
# lst = [1,2,3,4]
# lst.append(5)
# lst.pop(0)
# 5.defaultdict: 带有默认值的字典
# from collections import defaultdict
# dic = defaultdict(list)
# dic["k1"].append(12)
# print(dic)
# li = [11,22,33,44,55,77,88,99,90]
# result = {"key1":[],"key2":[]}
# result = {}
# for row in li:
#     if row > 66:
#         if 'key1' not in result:
#             result['key1'] = []
#         result['key1'].append(row)
#     else:
#         if 'key2' not in result:
#             result['key2'] = []
#         result['key2'].append(row)
# print(result)
# from collections import defaultdict
# dic = defaultdict(set)
# li = [11,22,33,44,55,77,88,99,90]
# for i in li:
#     if i > 66:
#         dic["k1"].add(i)
#     else:
#         dic["k2"].add(i)
# print(dic)
from collections import Counter
# s = "1112233344aaa"
# s = [1,1,2,2,3,3]
# s = (1,2,3,3,4,5,6,7,78)
# print(dict(Counter(s)))  # ***
# 统计元素出现的次数
6.今日总结
"""
1.序列化:
    json:
        dumps loads  对象转成字符串
        dump load    对象转成字符串写入文件
    pickle:
        dumps loads  对象转成类似字节
        dump  load    对象转成类似字节写入文件
2.os
    工作目录:
        os.getcwd()
        os.chdir()
    文件夹
        os.mkdir()
        os.rmdir()
        os.makedirs()
        os.removedirs()
        os.listdir()
    文件
        os.rename
        os.remove
    路径
        os.path.abspath()
        os.path.join()
        os.path.dirname()
        os.path.basename()
        os.path.isabs()
        os.path.isfile()
        os.path.isdir()
        os.path.exists()
        os.path.getsize() 
3.sys:
    sys.argv 当做脚本执行的时候能够携带参数
    sys.exit()
    sys.path()
    sys.platform()
4.hashlib:
    md5,sha1,sha256,sha512
    加密 - 校验
    import hashlib
    md5 = hashlib.md5()
    md5.update(b"alex")
    md5.hexdigest()
    加盐: 加固定盐,动态盐
    import hashlib
    md5 = hashlib.md5(b"wusir")
    md5.update(b"alex")
    md5.hexdigest()
5.collections
    1.命名元组
    2.默认字典参数
    3.双端队列
    4.计数器 ***
""""
												
											Python模块02/序列化/os模块/sys模块/haslib加密/collections的更多相关文章
- python之random 、os 、sys 模块
		
一.random模块 import random print(random.random())#(0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3 ...
 - Python os与sys模块解析
		
os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...
 - python 基本模块 random、os、sys
		
一.random模块 所有关于随机相关的内容都在random模块中 import random print(random.random()) # 0-1⼩数 print(random.uniform( ...
 - Python中os与sys模块的区别
		
os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...
 - python os和sys模块使用
		
python os和sys模块使用 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相 ...
 - Python 的 os 与 sys 模块
		
os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...
 - 43、os和sys模块的作用?
		
os与sys模块的官方解释如下: os:这个模块提供了一种方便的使用操作系统函数的方法. sys:这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数. 总结:os模块负责程序与操作系统的 ...
 - collections,time,random,os, sys 模块的使用
		
主要内容:1. 模块的简单认识2. collections模块3. time时间模块4. random模块5. os模块6. sys模块 一. 模块的简单认识什么是模块. 模块就是我们把装有特定功能的 ...
 - [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]
		
[xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...
 
随机推荐
- [noi.ac省选模拟赛]第10场题解集合
			
题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...
 - PAI-AutoLearning 图像分类使用教程
			
概述 PAI AutoLearning(简称PAI AL)自动学习支持在线标注.自动模型训练.超参优化以及模型评估.在平台上只需准备少量标注数据,设置训练时长即可得到深度优化的模型.同时自动学习PAI ...
 - idea出现 淇℃伅 乱码
			
问题:我是idea出现 淇℃伅 乱码, 解决:修改 tomcat 下的 logging.properties这个文件 为 GBK 就好了. 参考:https://blog.csdn.net/weixi ...
 - vue-admin-template搭建后台管理系统的学习(一)
			
首先我们来看看这个基础模版的目录结构 ├── build // 构建相关 ├── config // 配置相关├── src // 源代码│ ├── api // 所有请求│ ├── ass ...
 - web如何测试
			
当我们负责web测试的时候,先了解B/S架构,然后分析如何开始执行测试,一般步骤:从功能测试,兼容测试,安全测试. 功能测试: 一.链接测试,链接是web应用系统的一个很重要的特征,主要是用于页面之间 ...
 - 程序员必备基础:Git 命令全方位学习
			
前言 掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~ https: ...
 - Ubuntu18.04 IP配置问题
			
18.04 LTS 提供了通过 netplan.io 轻松配置网络连接 参考 Ubuntu18.04 发行release cn.ubuntu.com/server
 - JS判断 函数是否定义/变量是否定义
			
函数是否定义: <script type="text/javascript"> try { if(typeof FunName === "function&q ...
 - 半导体质量管理_Stargate
			
监控您的SPC活动 生产质量指标概述 应定期评估统计信息,以便您可以更好地利用统计过程控制.通过这种方式,您可以快速发现质量缺陷并采取适当的措施做出反应.LineWorks STARGATE提供了生产 ...
 - CSDN首页
			
打开CSDN首页,大部分的内容都是——AI,大数据,Python,很少谈及C#,谈到了也是拿C#做反面对比.博客园的首页没有这种恶意诋毁的言论,什么都有,.net的文章也很多,你发你的大数据和AI,我 ...