py知识(每日更新) 6.27

1.序列化模块(非常非常重要)

序列化:将一种数据结构(list,dic....)转化成一个(特殊的字符串)序列的过程.

序列化模块:将一种数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去

​ #json模块 是所有语言公认的一种序列. 最最常用的

​ 所以Python的支持的数据结构有限: int float str bool dict list(tuple) None

​ #pickle模块 只能是Python语言中使用的,序列化模块,支持Python所有的数据类型和对象

​ #shevle模块(3.3新增,文件存取等)

#json序列化 两对 四个方法
#dumps,loads 主要用于网络传输.也可以用于文件的存取
import json
dic = {"username":"lyoko","passwd":123}
ret = json.dumps(dic)
print(ret.type(ret))
ret_dict = json.load(ret)
print(ret_dict,type(ret_dict))
# 特殊的参数 
dic = {"username":"lyoko","passwd":123}
ret = json.dumps(dic,ensure_ascii=False, sort_key=True)
print(ret,type(ret))

#dump load 单个数据的存取文件
import json
dic = {"username":"lyoko","passwd":123}
with open("jsonlx1.json", encoding = "utf-8", mode = "w") as f1:
    json.dump(dic.f1)
    
with open(jsonlx1.json, encoding = "utf-8") as f1:
    dic1 = json.load(f1)
print(dic1,type(dic1))

pickle模块

dumps,loads 只能是网络传输用

import pickle
l1 = ["阿里巴巴", "滕循", "小黑", 666]
ret = pickle.dumps(l1)
print(ret)

l2 = pick,load(ret)
print(l2, tupe(l2))

dump,load 数据结构存取文件

imprt pickle
l1 = ["阿里巴巴", "滕循", "小黑", 666]
with open("pickle练习.pickle" ,mode = "wb") as f1:
    pickle.dump(l1,f1)
    
with open("pickle练习.pickle", mode = "rb") as f1:
    ret = pickle.load(f1)
    print(ret, type(ret))

多个数据写入文件

l1 = ["阿里巴巴", "滕循", "小黑", 666]
l2 = ["阿里巴巴", "滕循", "小黑", 777]
l3 = ["阿里巴巴", "滕循", "小黑", 888]
with open("pickle练习.pickle" ,mode = "wb") as f1:
    pickle.dump(l1,f1)
    pickle.dump(l2,f1)
    pickle.dump(l3,f1)
    
with open("pickle练习.pickle" ,mode = "rb") as f1:
    ret1 = pickle.load(f1)
    ret2 = pickle.load(f1)
    ret3 = pickle.load(f1)
    print(ret1,ret2,ret3)

2.os 模块

目录:当前文件夹(工作目录,当前目录,父级目录)

#和目录相关的
os.getcwd()  #获取当前工作目录(绝对路径)
os.chdir()  #改变当前工作目录(绝对路径)
os.chdir()  #返回当前目录
os.pardir() #获取当前目录的父目录
#和文件夹相关的
os.makedirs() #创建文件夹 
os.removedirs() #删除文件夹  删除截止到有文件的文件夹
os.mkdir() #生成单级目录
os.rmdir() #删除单级目录
os.listdir() #打印路径至下的文件名至列表
#和文件相关的
os.remove() #删除
os.rename("旧","新")  # 文件改名
os.stat("path/filename")  # 获取文件信息
# path 和路径相关
os.path.adspath() # 返回文件的绝对路径
os.path.split() # 将path分割成目录和文件的元祖返回
os.path.dirname()#返回path的目录就是os.path.split()前面内容(父级目录
print(__file__)  # 动态获取当前的绝对路径
os.path.basename() #获取文件名
os.path.exist() #判断路径是否存在 返回布尔值
os.path.isabs() #判断是否是绝对路径
os.path.isfile() #判断路径是否是表示一个文件
os.path.isdir() #判断是否是一个目录 返回布尔值 
os.path.join("D:","S1","随便") # 拼接路径  ----> D:S1\随便
os.path.getatime(path)  # 最后访问的时间
os.path.getmtime(path)  # 最后修改的时间
os.path.getsize(path)   # 文件的大小

3.sys 模块

sys.path 获取模块的所有路径
sys.version 获取py版本
sys.exit(n) 主动退出  quit()

4.hashlib 模块

加密模块,摘要算法 散列算法等等 他是一堆加密算法的集合.

hashlib如何加密?

​ 1.将一个bytes类型的数据 通过hashlib进行加密 返回一个等长的16进制数字

​ 2.过程不可逆.

​ 3.相同的bytes类型的数据,通过相同的加密方法得到的数据绝对相同

​ 4.不相同的bytes类型的数据,通过相同的加密方法得到的数据绝对不同

md5系列
import hashlib 
# md5
ret = hashlib.md5()
ret.update("123",encode(utf-8))
print(ret.hexdigest())

撞库:

​ 固定的md5密码库

加固定盐:

import hashlib 
# md5
ret = hashlib.md5("哈哈哈".encode("utf-8"))
ret.update("123",encode(utf-8))
print(ret.hexdigest())

加动态盐:

import hashlib 
# md5
ret = hashlib.md5("哈哈哈".encode("utf-8"))
ret.update("123",encode(utf-8))
print(ret.hexdigest())
sha系列 安全系数高 耗时高

与md5用法一致

文件的一次性校验

import hashlib
def md5_file(path):
    ret = hashlib.md5()
    with open(path, mode = "rb") as f1:
        while 1:
            content = f1.read(1024)
            if content:
                ret.update(content)
            else:
                return ret.hexdigest()

猜你喜欢

转载自www.cnblogs.com/lyoko1996/p/11104765.html